自定义适配器getview不叫

编程入门 行业动态 更新时间:2024-10-25 10:27:57
本文介绍了自定义适配器getview不叫的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有listfragment但适配器getview自定义适配器是不是叫所有..

I have a custom adapter with listfragment but adapter getview is not called at all..

我的适配器code

public class ModuleListItemAdapter extends BaseAdapter { List<ModuleItem> list; Context context; Module mod; public ModuleListItemAdapter() { super(); // TODO Auto-generated constructor stub } public ModuleListItemAdapter(Context context,List<ModuleItem> list,Module mod) { super(); this.list=list; this.context=context; this.mod=mod; // TODO Auto-generated constructor stub } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); RelativeLayout rl=(RelativeLayout) inflater.inflate(R.layout.moduleitem, null); GenerateModuleItemView gmiv=new GenerateModuleItemView(context); rl.addView(gmiv.itemDispView(mod.getFields(),list.get(position))); return rl; } public void setValue(List<ModuleItem> l) { this.list = l; notifyDataSetChanged(); } public void addValue(ModuleItem item) { this.list.add(item); notifyDataSetChanged(); } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; }

}

我的片段code

public class ModuleItemListFragment extends ListFragment { List<ModuleItem> list; Module mod; public ModuleItemListFragment() { super(); // TODO Auto-generated constructor stub } public ModuleItemListFragment(List<ModuleItem> list,Module mod) { super(); this.list=list; this.mod=mod; // TODO Auto-generated constructor stub } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.list, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ModuleListItemAdapter adapter = new ModuleListItemAdapter(getActivity(), list, mod); setListAdapter(adapter); }}

我的布局

<ListView xmlns:android="schemas.android/apk/res/android" android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#000000" android:dividerHeight="1dip" />

我不知道我这样做是错了,请帮助我..

I don't know where i did it wrong please help me..

推荐答案

这是因为getCount将()返回零。 您在getCount将()返回的数字是次getView()将被调用。 在getCount将(),你应该总是返回列表的大小。

It's because getCount() returns zero. The number you return in getCount() is the times the getView() will be called. In getCount() you should always return the size of the list.

因此​​

@Override public int getCount() { return list.size(); } @Override public ModuleItem getItem(int position) { return list.get(position); }

此外,也许是布局的ListView控件ID是不是android.R.id.list?

Also, maybe the layout's ListView id is not android.R.id.list?

请确保您有XML

<ListView android:id="@android:id/list" ...

另外,千万不要将任何数据在构造函数中的片段。

Also, don't ever pass any data to a fragment in constructor.

错误

public ModuleItemListFragment(List<ModuleItem> list,Module mod) { super(); this.list=list; this.mod=mod; }

private static final String EXTRA_LIST = "ModuleItemListFragment.EXTRA_LIST"; private static final String EXTRA_MODULE = "ModuleItemListFragment.EXTRA_MODULE"; public static ModuleItemListFragment instantiate(ArrayList<ModuleItem> list, Module mod) { final Bundle args = new Bundle(); args.putParcelable(EXTRA_LIST, list); args.putParcelable(EXTRA_MODULE, module); final ModuleItemListFragment f = new ModuleItemListFragment(); f.setArguments(args); return f; } @Override public void onCreate(Bundle state) { super.onCreate(state); final Bundle args = getArguments(); this.list = args.getParcelable(EXTRA_LIST); this.module = args.getParcelable(EXTRA_MODULE); }

当然,你必须让你的模块Parcelable或序列化。

Of course, you have to make your Module Parcelable or Serializable.

您必须指定的args因为碎片会被杀死,由系统恢复,如果你通过制定者或构造函数传递数据,他们将无法恢复,因此可以成为在某些情况下空。

You must specify args because the Fragment can be killed and restored by the system and if you pass data via setters or constructors they will not be restored and therefore can become null in some circumstances.

更多推荐

自定义适配器getview不叫

本文发布于:2023-11-26 21:30:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635262.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   适配器   不叫   getview

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!