Java 在android中使listView可点击
我有一些代码可以让我的ListView可以点击,并让我的用户进入另一个活动。但我有一个错误,说 尝试在空对象引用上调用虚拟方法“void android.widget.ListView.setClickableboolean” 但我不知道如果ListView正常工作,它怎么会是空对象引用。这是我的源代码:Java 在android中使listView可点击,java,android,listview,Java,Android,Listview,我有一些代码可以让我的ListView可以点击,并让我的用户进入另一个活动。但我有一个错误,说 尝试在空对象引用上调用虚拟方法“void android.widget.ListView.setClickableboolean” 但我不知道如果ListView正常工作,它怎么会是空对象引用。这是我的源代码: public void populateList() { DatabaseReference rootRef = FirebaseDatabase.getInstance().getR
public void populateList() {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference allBooksRef = rootRef.child("All_Books");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Book> bookModelList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Book book = ds.getValue(Book.class);
bookModelList.add(book);
}
ListView list = (ListView) findViewById(R.id.listView);
CustomListAdapter adapter = new CustomListAdapter(AdminFeed.this, bookModelList);
list.setAdapter(adapter);
list.setClickable(true);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
allBooksRef.addListenerForSingleValueEvent(valueEventListener);
list.setClickable(true);
list.setOnItemClickListener((AdapterView.OnItemClickListener) this);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(AdminFeed.this, BookIndexed.class);
i.putExtra("ValueKey", modelList.get(position).getTitle());
i.putExtra("ValueKey2", modelList.get(position).getAuthor());
startActivity(i);
title = bookModelList.get(position).getTitle();
}
为什么会出现这样的错误?将findViewById移到ValueEventListener之外,如下面的代码所示
试试这个
public void populateList() {
ListView list = (ListView) findViewById(R.id.listView);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference allBooksRef = rootRef.child("All_Books");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Book> bookModelList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Book book = ds.getValue(Book.class);
bookModelList.add(book);
}
CustomListAdapter adapter = new CustomListAdapter(AdminFeed.this, bookModelList);
list.setAdapter(adapter);
list.setClickable(true);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
allBooksRef.addListenerForSingleValueEvent(valueEventListener);
list.setClickable(true);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent i = new Intent(AdminFeed.this, BookIndexed.class);
i.putExtra("ValueKey", modelList.get(position).getTitle());
i.putExtra("ValueKey2", modelList.get(position).getAuthor());
startActivity(i);
title = bookModelList.get(position).getTitle();
}
});
}
您没有初始化列表。在onCreate中添加list=ListView findviewbydr.id.ListView。您不需要list.setClickabletrue。只需使用setOnItemClickListener即可。将此ListView列表=ListView findViewByIdR.id.ListView;在填充列表的第一行中。按照您所做的方式,您的列表视图仅在调用onDataChanged时初始化,但您也尝试将列表视图设置为可在函数外部单击。这不起作用,我现在在尝试导航到提要活动时出现错误,而不管我在列表视图中单击某个条目。我收到以下错误:java.lang.RuntimeException:无法启动活动组件信息{com.example.apple.BookStore/com.example.apple.BookStore.AccountActivity.AdminApplication.AdminFeed}:java.lang.ClassCastException:com.example.apple.BookStore.AccountActivity.AdminApplication.AdminFeed无法强制转换为android.widget.AdapterView$OnItemClickListener@EoghanCasey尝试此意图i=new IntentGetApplication上下文,BookIndexed.class@EoghanCasey checl更新的ansI现在有一个错误:java.lang.IndexOutOfBoundsException:索引:0,大小:0