2016-09-05 6 views
2

Я использую recyclerView и загружаю данные из базы данных. Элемент recyclerView имеет 2 кнопки. RecyclerView загружается отлично, а клики работают нормально для следующего кода.recyclerView ClickListener возвращает null после notifyDataSetChanged()

allData=db.getCatData(CATEGORYLIST_CIDD,1); 
textlistadapter = new TextListAdapter(getActivity(), allData); 
recyclerView.setAdapter(textlistadapter); 

позже я переставить адаптер данных для отображения данных в порядке убывания с использованием этого кода

db=new DatabaseHandler(getActivity().getApplicationContext()); 
    allData=db.getCatData(CATEGORYLIST_CIDD,order_id); 
    textlistadapter = new TextListAdapter(getActivity(), allData); 
    recyclerView.setAdapter(textlistadapter); 
    textlistadapter.notifyDataSetChanged(); 

Теперь элементы переставить на recyclerView, но onShareButtonClickListener возвращает нуль, вот код адаптера.

private OnShareButtonClickListener onShareButtonClickListener; 
public interface OnShareButtonClickListener { 
    void onItemClick(View view, Pojo obj, int position); 
} 
public void setOnShareButtonClickListener(final OnShareButtonClickListener onShareButtonClickListener) { 
    this.onShareButtonClickListener = onShareButtonClickListener; 
} 

защелкивающийся код слушателя здесь

holder.bt_share.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Snackbar.make(view, "Share Clicked", Snackbar.LENGTH_SHORT).show(); 
      if (onShareButtonClickListener != null) { 
       onShareButtonClickListener.onItemClick(view, c, position); 
      } 
     } 
    }); 

Клик не работает, так как onShareButtonClickListener равна нулю.

Тот же код работает хорошо в первый раз, и как только я меняю порядок, события кликов не работают, все остальные функции работают хорошо.

+0

Получил подсказку, но я не могу понимать это. «в refreshData вы создаете новый экземпляр адаптера, когда вы создаете новый экземпляр, все данные будут сброшены, не создавайте новый экземпляр и просто не обновляйте свои данные и не вызывайте notifyDataSetChange« –

ответ

2

вы должны только сделать это один раз:

textlistadapter = new TextListAdapter(getActivity(), allData); 
recyclerView.setAdapter(textlistadapter); 

позже, если вы хотите обновить/изменить данные, то вы должны сделать что-то вроде этого:

textlistadapter.setListItems(allData); 
textlistadapter.notifyDataSetChanged(); 

Где setListItems() - это общедоступный метод в вашем адаптере, например:

public void setListItems(List<> allData) { 
    this.data.clear(); 
    this.data.addAll(allData); 
} 
+0

отлично работает, но анимация загрузки recyclerView прошла. –

+0

Я уверен, что есть обходной путь для этого, в новом вопросе тогда =) – TWL

0

Легко понять, что вы делаете неправильно. Вы заполняете массив, который будет передавать ваш адаптер с данными, что означает, что после установки адаптера, если вы хотите, чтобы данные изменялись, вам нужно только изменить массив, в который вы заполняли данные, и сообщить об этом адаптеру для изменения данных ,

Например:

myData = db.getData(); 
myAdapter = new MyAdapter(this,myData); 
recyvlerview.setAdapter(myAdapter); 

Теперь каждый раз, когда вы хотите изменить данные, вам нужно только изменить MyData и notifity адаптер

myAdapter.notifyDataSetChange(); 

В принципе вместо того, чтобы сделать это:

db=new DatabaseHandler(getActivity().getApplicationContext()); 
allData=db.getCatData(CATEGORYLIST_CIDD,order_id); 
textlistadapter = new TextListAdapter(getActivity(), allData); 
recyclerView.setAdapter(textlistadapter); 
textlistadapter.notifyDataSetChanged(); 

Этого должно быть достаточно

db=new DatabaseHandler(getActivity().getApplicationContext()); 
allData=db.getCatData(CATEGORYLIST_CIDD,order_id); 
textlistadapter.notifyDataSetChanged(); 
+0

о, да, неправильно ли загружать новые данные в адаптер? –

+0

Отметьте отредактированный ответ – Ricardo

+0

fine, я использую List allData; Как переставить allData с первого на последний и последний до первого и Random –

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

  • Нет связанных вопросов^_^