自定义适配器getview不叫自定义、适配器、不叫、getview

2023-09-06 02:42:30 作者:劣酒烧喉

我有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="http://schemas.android.com/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.

 
精彩推荐
图片推荐