[英]App crashing when trying to use RecyclerView on android 5.0
[英]App crashing when trying to use RecyclerView With LayoutManager
我試圖在RecyclerView 中顯示數據但應用程序錯誤:
嘗試在空對象引用上調用虛擬方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)”
RecyclerView
聲明:
RecyclerView rvTodos;
findViewByid
的RecyclerView
:
rvTodos = (RecyclerView) findViewById(R.id.rvTodos);
這是我的SetAdapter
類:
private void setAdapters() {
todosAdapter = new TodosAdapter(toDoList);
RecyclerView.LayoutManager mLayoutManager1 = new LinearLayoutManager(getApplicationContext());
rvTodos.setLayoutManager(mLayoutManager1);
rvTodos.setItemAnimator(new DefaultItemAnimator());
rvTodos.setAdapter(todosAdapter);
}
打開 Logcat 並顯示錯誤,然后單擊錯誤,然后在這一行:
rvTodos.setItemAnimator(new DefaultItemAnimator());
這是我的TodosListActivity.class
public class TodosListActivity extends AppCompatActivity implements View.OnClickListener{
TextView txtTitle, txtClose, txtSave, txtAdd;
String label_todos, text_add_todo;
RecyclerView rvTodos;
private List<ToDo> toDoList = new ArrayList<>();
private TodosAdapter todosAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_events_list);
init();
}
private void init() {
txtTitle = (TextView) findViewById(R.id.txtTitle);
label_todos = getResources().getString(R.string.label_todos);
txtTitle.setText(label_todos);
txtSave = (TextView) findViewById(R.id.txtSave);
txtSave.setVisibility(View.GONE);
txtClose = (TextView) findViewById(R.id.txtClose);
txtClose.setOnClickListener(this);
txtAdd = (TextView) findViewById(R.id.txtAdd);
txtAdd.setOnClickListener(this);
text_add_todo = getResources().getString(R.string.text_add_todo);
txtAdd.setText(text_add_todo);
rvTodos = (RecyclerView) findViewById(R.id.rvTodos);
setAdapters();
prepareToDOData();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.txtAdd:
Intent intent = new Intent(this, AddTodoActivity.class);
startActivity(intent);
break;
case R.id.txtClose:
finish();
break;
}
}
private void setAdapters() {
todosAdapter = new TodosAdapter(toDoList);
RecyclerView.LayoutManager mLayoutManager1 = new LinearLayoutManager(getApplicationContext());
rvTodos.setLayoutManager(mLayoutManager1);
rvTodos.setItemAnimator(new DefaultItemAnimator());
rvTodos.setAdapter(todosAdapter);
}
private void prepareToDOData() {
ToDo data = new ToDo("David Cummings", "26/10/2017 2:25PM");
toDoList.add(data);
data = new ToDo("Lawrence Cummings", "26/10/2017 2:25PM");
toDoList.add(data);
data = new ToDo("Ketul Inc.", "11/11/2017 3:46 PM");
toDoList.add(data);
//notesAdapter.notifyDataSetChanged();
todosAdapter.notifyDataSetChanged();
}
}
我參考了這個鏈接,但它對我不起作用: 嘗試在 android 5.0 上使用 RecyclerView 時應用程序崩潰
正如您提到的,您正在使用兩個reyclerView
因此請檢查您的recyclerview Id
是否有完美的recyclerview id
或者您為兩個recyclerview
分配了相同的id
。
參考代碼 :
參考: https : //www.androidhive.info/2016/01/android-working-with-recycler-view/
調用prepareToDOData();
在setAdapters()
里面
private void setAdapters() {
todosAdapter = new TodosAdapter(toDoList);
RecyclerView.LayoutManager mLayoutManager1 = new LinearLayoutManager(getApplicationContext());
rvTodos.setLayoutManager(mLayoutManager1);
rvTodos.setItemAnimator(new DefaultItemAnimator());
rvTodos.setAdapter(todosAdapter);
prepareToDOData();//call here
}
private void prepareToDOData() {
ToDo data = new ToDo("David Cummings", "26/10/2017 2:25PM");
toDoList.add(data);
data = new ToDo("Lawrence Cummings", "26/10/2017 2:25PM");
toDoList.add(data);
data = new ToDo("Ketul Inc.", "11/11/2017 3:46 PM");
toDoList.add(data);
//notesAdapter.notifyDataSetChanged();
todosAdapter.notifyDataSetChanged();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.