Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create listview in fragment android

As the title I want to create a listview with custom row in Fragment. My code below.

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; } } 

But when I run the app that display no thing. Could anyone tell me what wrong here and how can I fix it?

like image 696
gamo Avatar asked Mar 19 '14 16:03

gamo


2 Answers

I guess your app crashes because of NullPointerException.

Change this

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

to

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

assuming listview belongs to the fragment layout.

The rest of the code looks alright

Edit:

Well since you said it is not working i tried it myself

enter image description here

like image 70
Raghunandan Avatar answered Sep 28 '22 09:09

Raghunandan


Please use ListFragment. Otherwise, it won't work.

EDIT 1: Then you'll only need setListAdapter() and getListView().

like image 33
Julisch Avatar answered Sep 28 '22 07:09

Julisch