Android - RecyclerView数据未显示

时间:2016-11-18 20:55:52

标签: java android android-recyclerview

我使用一个RecyclerView来显示两个相邻的列表,到目前为止一直很好,但我面临的问题是:我将数据存储在一个公共void方法中但是当我调用该方法初始化列表时它不起作用换句话说,这些项目没有出现

#这是方法

public void InitData(){       
    DataHolder item1 = new DataHolder();
    item1.setEnglish("word in eng");
    item1.setGerman("word in ger");
    list.add(item1);

    DataHolder item2 = new DataHolder();
    item2.setEnglish("word in eng");
    item2.setGerman("word in ger");
    list.add(item2);

    DataHolder item3 = new DataHolder();
    item3.setEnglish("word in eng");
    item3.setGerman("word in ger");
    list.add(item3);

    DataHolder item4 = new DataHolder();
    item4.setEnglish("word in eng");
    item4.setGerman("word in ger");
    list.add(item4);

    DataHolder item5 = new DataHolder();
    item5.setEnglish("word in eng");
    item5.setGerman("word in ger");
    list.add(item5);
}

#UPDATE 主要代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_two_fragment, container, false);

        rv = (RecyclerView) view.findViewById(R.id.list_view_m);
        rv.setHasFixedSize(true);
        inputSearch = (EditText) view.findViewById(R.id.inputSearch);

        mAdapter = new DataAdapter(list, getContext());
        rv.setAdapter(mAdapter);
        InitData();

     return view;
    }

2 个答案:

答案 0 :(得分:1)

首先为RecyclerView添加LayoutManager,以告诉它如何显示元素。

其次,我建议在将数据放入适配器

之前先初始化数据
rv = (RecyclerView) view.findViewById(R.id.list_view_m);
rv.setHasFixedSize(true);
//set a vertical layout so the list is displayed top down
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
rv.setLayoutManager(layoutManager);

//initialize the data before binding it to the Adapter
InitData();
mAdapter = new DataAdapter(list, getContext());
rv.setAdapter(mAdapter);

来自@Stefan的答案是正确的,您在更改了绑定到RecyclerView的列表的内容后使用mAdapter.notifyDataSetChanged();,如果它在RecyclerView中有LinearLayoutManager,它将对您的代码起作用。

但是在将它绑定到适配器之前更好地拥有一个完整(或部分)列表,因此RecyclerView显示来自beggining的内容,并在您更改列表的元素(添加,编辑或删除)之后,调用mAdapter.notifyDataSetChanged();,以便RecyclerView自动更新显示。

答案 1 :(得分:0)

将数据添加到数据集后,您应该调用

adapter.notifyDataSetChanged();