在Android中单击ListView



我的代码应该使我的 ListView可单击并将用户带入另一个活动。但是我遇到了一个错误,说

Attempt to invoke virtual method 'void android.widget.ListView.setClickable(boolean)' on a null object reference

,但是我不知道如果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();
        }
    });
}

最新更新