Neues Listview in Android- Fragment

? user3422401 @ | Original: StackOverFlow
---

Wie der Titel möchte ich eine Listview mit benutzerdefinierten Zeile Fragment erstellen. Mein Code unten.

Fragment class

public class PhotosFragment extends Fragment{

public PhotosFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_photos, container, false);

    ArrayList<ListviewContactItem> listContact = GetlistContact();
    ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);
    lv.setAdapter(new ListviewContactAdapter(getActivity(), listContact));

    return rootView;
}

private ArrayList<ListviewContactItem> GetlistContact(){
    ArrayList<ListviewContactItem> contactlist = new ArrayList<ListviewContactItem>();

    ListviewContactItem contact = new ListviewContactItem();

    contact.SetName("Topher");
    contact.SetPhone("01213113568");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.SetName("Jean");
    contact.SetPhone("01213869102");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.SetName("Andrew");
    contact.SetPhone("01213123985");
    contactlist.add(contact);

    return contactlist; 
    }   
}

Adapter class

public class ListviewContactAdapter extends BaseAdapter{
private static ArrayList<ListviewContactItem> listContact;

private LayoutInflater mInflater;

public ListviewContactAdapter(Context photosFragment, ArrayList<ListviewContactItem> results){
    listContact = results;
    mInflater = LayoutInflater.from(photosFragment);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return listContact.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return listContact.get(arg0);
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}


public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    if(convertView == null){
        convertView = mInflater.inflate(R.layout.contact_item, null);
        holder = new ViewHolder();
        holder.txtname = (TextView) convertView.findViewById(R.id.lv_contact_item_name);          
        holder.txtphone = (TextView) convertView.findViewById(R.id.lv_contact_item_phone);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtname.setText(listContact.get(position).GetName());
    holder.txtphone.setText(listContact.get(position).GetPhone());

    return convertView;
}

static class ViewHolder{
    TextView txtname, txtphone;
}
}

Aber wenn ich die App, die keinen was an. Kann mir jemand sagen, was hier falsch und wie kann ich es beheben?

---

Top 5 Antwort

1Raghunandan @

Ich denke, Ihre Anwendung abstürzt, weil der NullPointerException .

Change this

ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);

to

ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);

vorausgesetzt Listview gehört zur Fragment -Layout.

Der Rest der Code sieht in Ordnung

Edit:

Nun, da Sie sagte, dass es nicht funktioniert, habe ich versucht, es selbst

Neues Listview in Android- Fragment

2julisch @

Bitte verwenden Sie ListFragment . Ansonsten wird es nicht funktionieren.

EDIT 1 : Dann müssen Sie aber nur setListAdapter() und getListView() .

3user3936680 @

Sie brauchen zu geben :

public void onActivityCreated(Bundle savedInstanceState)    
{
  super.onActivityCreated(savedInstanceState);
}

innerhalb Fragment .

4user3593801 @

Instead:

public class PhotosFragment extends Fragment

You can use:

public class PhotosFragment extends ListFragment

Es ändert die Methoden

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ArrayList<ListviewContactItem> listContact = GetlistContact();
        setAdapter(new ListviewContactAdapter(getActivity(), listContact));
    }

onActivityCreated ist ungültig und Sie nicht brauchen, um eine Ansicht wie in zurück onCreateView

Sie können ein Beispiel http://www.vogella.com/tutorials/AndroidListView/article.html#listfragments sehen