在片段android中创建listview

作为标题,我想在Fragment中创建一个带有自定义行的列表视图。 我的代码如下。

片段类

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 listContact = GetlistContact(); ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact); lv.setAdapter(new ListviewContactAdapter(getActivity(), listContact)); return rootView; } private ArrayList GetlistContact(){ ArrayList contactlist = new ArrayList(); 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; } } 

适配器类

 public class ListviewContactAdapter extends BaseAdapter{ private static ArrayList listContact; private LayoutInflater mInflater; public ListviewContactAdapter(Context photosFragment, ArrayList 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; } } 

但是,当我运行显示没有东西的应用程序。 谁能告诉我这里有什么问题,我该如何解决?

Solutions Collecting From Web of "在片段android中创建listview"

我想你的应用程序崩溃是因为NullPointerException

改变这个

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

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

假设listview属于片段布局。

其余的代码看起来还不错

编辑:

好吧,因为你说它不工作我自己尝试了

在此处输入图像描述

请使用ListFragment 。 否则,它将无法正常工作。

编辑1:那么你只需要setListAdapter()getListView()

你需要给:

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

里面的片段。

inflate()方法有三个参数:

  1. 布局XML文件的ID(在R.layout内),
  2. 要插入片段视图的父ViewGroup,

  3. 第三个布尔值,告知是否应将片段的View作为布局XML文件中的膨胀插入到父ViewGroup中。

在这种情况下,我们传递false,因为View将通过我们调用的一些Android代码(换句话说,在我们的背后)附加到其他地方的父ViewGroup。 将false作为最后一个parameter passing给inflate()时,父ViewGroup仍然用于膨胀视图的布局计算,因此您不能将null作为父ViewGroup传递。

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

所以,你需要在这里调用rootView

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

代替:

 public class PhotosFragment extends Fragment 

您可以使用:

 public class PhotosFragment extends ListFragment 

它改变了方法

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

onActivityCreated是无效的,您不需要像onCreateView那样返回一个视图

你可以在这里看到一个例子