我使用一个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;
}
答案 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();