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?
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
Please use ListFragment
. Otherwise, it won't work.
EDIT 1: Then you'll only need setListAdapter()
and getListView()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With