2016-11-18 80 views
0

我使用一個RecyclerView來顯示兩個相鄰的列表,迄今爲止很好,但我面臨的問題是:我將數據存儲在一個公共的無效方法,但是當我調用該方法初始化它不換言之工作清單中的項目沒有顯示出來Android - RecyclerView數據沒有顯示

#這是方法

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

請顯示[mcve]。你的問題只需要1個項目,你應該顯示列表的代碼。 –

+0

請檢查更新 –

+0

在創建適配器之前調用'InitData()'。 –

回答

1

第一順序來告訴它如何顯示的元素添加布局管理的RecyclerView。

其次,我建議initializate的數據會首先把它在適配器

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的答案是正確的之前,您使用mAdapter.notifyDataSetChanged();你已經改變了列表的綁定到RecyclerView內容後,如果它有RecyclerView中的LinearLayoutManager,它就可以處理你的代碼。

但是,在將其綁定到適配器之前,最好有一個完整(或部分)列表,以便RecyclerView顯示來自開始的內容,並且在更改列表元素(添加,編輯或刪除)後, ,請撥打mAdapter.notifyDataSetChanged();,以便RecyclerView自動更新顯示。

+0

它的工作完美,但我不得不刪除'mAdapter .notifyDataSetChanged();'部分,因爲它給了我一個NullPointerException!現在一切正常,再次感謝 –

0

將數據添加到數據集後,你應該叫

adapter.notifyDataSetChanged(); 
+0

沒有工作 –

+0

添加其餘的代碼請 – Stefan

+0

請檢查更新 –