2016-11-18 2 views
0

Я использую один RecyclerView для отображения двух смежных списков, настолько хороших, но проблема, с которой я столкнулся, заключается в следующем: я храню данные в общедоступном методе void, но когда я вызываю этот метод инициализировать списки не работают, другими словами, элементы не отображаются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

Сначала добавьте LayoutManager для 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, и он работал бы над вашим кодом, если бы у него был LinearLayoutManager в RecyclerView.

Но его лучше иметь полный (или частичный) список, прежде чем привязывать его к адаптеру, поэтому RecyclerView отображает содержимое с самого начала и после того, как вы изменили элементы списка (добавьте, отредактируйте или удалите) , вызовите mAdapter.notifyDataSetChanged();, чтобы RecyclerView автоматически обновил отображение.

+0

, он работал отлично, но мне пришлось удалить «mAdapter» .notifyDataSetChanged(); 'part потому что он дал мне исключение NullPointerException! теперь все работает хорошо, спасибо снова –

0

После добавления данных в наборе данных, вы должны вызвать

adapter.notifyDataSetChanged(); 
+0

что не работает –

+0

добавьте остальную часть своего кода, пожалуйста, – Stefan

+0

, пожалуйста, проверьте обновление –

Смежные вопросы