listview中的Android-ArrayAdapter没有刷新

时间:2011-12-31 20:01:38

标签: android listview android-arrayadapter

我目前有一个使用ArrayAdapter的listview。我从没有数据开始,并使用用户输入动态添加数据。出于某种原因,当我调用adapter.notifyDataSetChanged()时,列表视图不会刷新。我出于测试目的在它之前添加了一些基本数据,它只是简单,因此适配器工作正常。这是第一次实现我自己的适配器,所以我不确定我是否做错了。谢谢。代码如下。

我的适配器:

public class FeedListviewAdapter extends ArrayAdapter<FeedPostingLayout> {
    // add the feed posting layout
    ArrayList<FeedPostingLayout> postingLayout;

    public FeedListviewAdapter(Context context, int textViewResourceId,
            ArrayList<FeedPostingLayout> postingLayout) {
        super(context, textViewResourceId, postingLayout);
        this.postingLayout = postingLayout;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = vi.inflate(R.layout.post_layout, null);
        }

        FeedPostingLayout layout = postingLayout.get(position);
        if (layout != null) {
            TextView post = (TextView) view.findViewById(R.id.postTextView);
            TextView time = (TextView) view
                    .findViewById(R.id.postTimeTextView);

            if (post != null) {
                post.setText(layout.feedPost);
            }

            if (time != null) {
                time.setText(layout.feedTime);
            }
        }

        return view;
    }

}

在我创建新数组的地方,将其添加到我的数据中,然后刷新适配器:

FeedPostingLayout test = new FeedPostingLayout(post, currentTimePost);
        data.add(test);
        feedAdapter.notifyDataSetChanged();

感谢。

2 个答案:

答案 0 :(得分:1)

尝试直接在ArrayAdapter添加。

例如:

FeedListviewAdapter adapter=new FeedListviewAdapter(ctx,id,data);
FeedPostingLayout test = new FeedPostingLayout(post, currentTimePost);
adapter.add(test);
adapter.notifyDataSetChanged();

答案 1 :(得分:0)

只需尝试更换arraylist,就像

一样
setPostingLayout(ArrayList<FeedPostingLayout> postingLayout) {
    this.postingLayout = postingLayout;
    notifyDataSetChanged();
} 

原因是arraylist对数据进行了不同的副本更改,不会反映到postingLayout。