notifyDataSetChanged()没有显示自定义列表适配器

时间:2015-08-28 00:35:41

标签: android android-arrayadapter

link
我有一个自定义数组适配器而不是扩展ArrayAdapter,但是通常不会显示notifyDataSetChanged()方法(如果你尝试的话它不起作用)。

class matchAdapter extends ArrayAdapter<Match> {
public matchAdapter(Context context, List<Match> matches) {
    super(context, R.layout.match_layout, matches);
}
@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
}

以上是我的适配器类。 notifyAll()会做同样的事情吗?

2 个答案:

答案 0 :(得分:0)

我会写一个例子,它不是真正的代码,但它是你必须要做的。

  1. 创建ArrayList<matchList> matchList = new ArrayList<matchList>();

    Adapter

  2. 创建adapter = new matchAdapter(this, matchList);

    Adapter

  3. 设置YourListView.setAdapter(adapter);

    List

  4. 您更改了matchList.add(Stuff for your list);

    上的内容

    List

  5. 现在通知adapter.notifyDataSetChanged();已更改:

    notifyDataSetChanged()

  6. 希望对您有所帮助,如果没有,只需输入评论,我就会尝试更新我的答案。

    修改

    我会给你一些例子......

    如果您想拨打List.clear(); List.addAll(YourStuff); adapter.notifyDataSetChanged(); ,请执行以下操作:

    AsyncTask

    其他方法可能是,您正在使用onBackGround(),因此您的onPostExecute可以让它返回列表中的项目,然后在 @Override protected List<matchList> doInBackground(String... params) { List<matchList> items = loadUpdatedDataset(params); return items; } @Override protected void onPostExecute(List<matchList> itemschangeds) { updateAdapterDataset(itemschangeds); adapter.notifyDataSetChanged(); } 更新适配器。

    示例:

    {{1}}

答案 1 :(得分:0)

您的listAdapter被声明为类型ListAdapter,其中没有您期望的方法(notifyDataSetChanged)。您需要至少BaseAdapter或将其投放到BaseAdapter(我假设您的MatchAdapter至少是BaseAdapter - 如果不是,那么,请将其称为((BaseAdapter)listAdapter).notifyDataSetChanged(); 方法没有意义:-))

npm install <module-name>