Java 在android中使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

我有一些代码可以让我的ListView可以点击,并让我的用户进入另一个活动。但我有一个错误,说

尝试在空对象引用上调用虚拟方法“void android.widget.ListView.setClickableboolean”

但我不知道如果ListView正常工作,它怎么会是空对象引用。这是我的源代码:

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