在片段android中创建listview
Posted
技术标签:
【中文标题】在片段android中创建listview【英文标题】:Create listview in fragment android 【发布时间】:2014-04-26 02:37:36 【问题描述】:作为标题,我想在 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<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;
适配器类
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;
但是当我运行应用程序时,什么都没有显示。谁能告诉我这里出了什么问题,我该如何解决?
【问题讨论】:
不,它运行良好,但在片段中不显示任何内容。 我也在尝试同样的事情。可以给我完整的源代码吗? 我在我的问题中发布的所有内容。你也可以在google上找到很多关于listview的教程。 对我来说也一样,在这里我的代码***.com/questions/26254727/… 嗨@gamo 你能告诉我布局“contact_item”和Java“ListviewContactItem”的代码吗?我正在尝试做类似的事情。 【参考方案1】:我猜你的应用程序崩溃是因为NullPointerException
。
改变这个
ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);
到
ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);
假设listview属于片段布局。
其余的代码看起来还不错
编辑:
好吧,既然你说它不起作用,我自己试过了
【讨论】:
@user3422401 好的,我会尝试您的代码并在 5 分钟内返回。但是代码看起来还不错 @user3422401 它工作正常我只按照我的帖子中的建议进行了更改。 @user3422401 检查快照是否正常工作。所以我们需要更多信息。发布的代码很好。您在哪里将片段添加到活动中。发布 xml 布局 我试过了,但对我不起作用。我在 MainActivity 的滑动菜单调用中的 Fragment 类,但我认为这并不重要。 @user3422401 AFAIK 您发布的代码没有任何问题。其他地方有问题【参考方案2】:请使用ListFragment
。否则,它将不起作用。
编辑 1:
那么你只需要setListAdapter()
和getListView()
。
【讨论】:
让我试试。我会把结果留给你。 你能给我们举一个 ListFragment 是如何工作的例子吗? 看看这个:tutorialspoint.com/android/android_list_fragment.htm【参考方案3】:你需要付出:
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
内部片段。
【讨论】:
【参考方案4】:inflate() 方法接受三个参数:
-
布局 XML 文件的 ID(在 R.layout 内),
要插入片段视图的父视图组,
第三个布尔值告诉片段的视图是否从 布局 XML 文件应插入到父 ViewGroup 中。
在这种情况下,我们传递 false 因为视图将附加到 其他地方的父 ViewGroup,通过我们调用的一些 Android 代码(在 换句话说,在我们背后)。当您将 false 作为最后一个参数传递时 到 inflate(),父 ViewGroup 仍然用于布局 膨胀视图的计算,因此您不能将 null 作为父级传递 视图组。
View rootView = inflater.inflate(R.layout.fragment_photos, container, false);
所以,你需要在这里打电话给rootView
ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);
【讨论】:
【参考方案5】:改为:
public class PhotosFragment extends Fragment
你可以使用:
public class PhotosFragment extends ListFragment
它改变了方法
@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
ArrayList<ListviewContactItem> listContact = GetlistContact();
setAdapter(new ListviewContactAdapter(getActivity(), listContact));
onActivityCreated 是无效的,您不需要像在 onCreateView 中那样返回视图
你可以看一个例子here
【讨论】:
以上是关于在片段android中创建listview的主要内容,如果未能解决你的问题,请参考以下文章
如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?
如何隐藏默认片段 actionBar 在 android & kotlin 中创建我们自己的 actionBar