从Android Firebase检索数据,将其显示到listview并将onItemClickListener应用于ListView

时间:2018-11-21 22:43:31

标签: firebase android-studio listview

我是Android开发的新手。

我想从Firebase检索所有标题(Title 1, Title 2, Title 3, Title 4)并显示在listview中,我可以这样做。但是我想将onItemClickListener应用于listview,并且我希望当我单击listview中的特定项目时,下一个活动应该向我显示特定内容。 例如,如果我单击Title 1,则下一个活动应显示Content 1。如果为Title 2,则为Content 2

请说明如何执行此操作。

advaitavedanta-f1443
Chapter 1
description: "Content 1"
title: "Title 1"
Chapter 2
description: "Content 2"
title: "Title 2"
Chapter 3
description: "Content 3" 
title: "Title 3"
Chapter 4
description: "Content 4"
title: "Title 4"
//this is my data from firebase//



private static final String TAG = "MainActivity";
private FirebaseDatabase mDatabase;
private DatabaseReference mDbRef;

String Title;
String Description;
ListView listView;
ArrayList<String> mybook = new ArrayList<>();
ArrayAdapter<String> arrayAdapter;
Firebase url;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDatabase = FirebaseDatabase.getInstance();
    mDbRef = mDatabase.getReference("Chapter 1");
    User user = new User("Title 1", "Content 1");
    mDbRef.setValue(user);

    mDbRef = mDatabase.getReference("Chapter 2");
    user = new User("Title 2", "Content 2");
    mDbRef.setValue(user);

    mDbRef = mDatabase.getReference("Chapter 3");
    user = new User("Title 3", "Content 3");
    mDbRef.setValue(user);

    mDbRef = mDatabase.getReference("Chapter 4");
    user = new User("Title 4", "Content 4");
    mDbRef.setValue(user);

    Firebase.setAndroidContext(this);

    listView =  findViewById(R.id.listView);
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, notes);
    listView.setAdapter(arrayAdapter);

    url = new Firebase("https://advaitavedanta-f1443.firebaseio.com/");

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getApplicationContext(),MainContent.class);
            intent.putExtra("noteId", Description);

        }
    });
    url.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            Title = dataSnapshot.child("title").getValue(String.class);
            mybook.add(Title);
            Description = dataSnapshot.child("description").getValue(String.class);

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
}

}`

2 个答案:

答案 0 :(得分:0)

我发现您的代码存在潜在问题。 在您的

  

listView.setOnItemClickListener(...),onItemClick()

没有代码可以实际启动新活动。 您仅构成Intent

之后

  

意图intent =新意图(getApplicationContext(),MainContent.class);
  intent.putExtra(“ noteId”,Description);

您应该添加

  

startActivity(intent);

希望您能得到排序。

答案 1 :(得分:0)

由于您正在使用User对象添加Firebase数据,因此请在添加的孩子上使用用户对象列表进行检索。

列出用户列表

ArrayList<User> users = new ArrayList<>();

然后在您的孩子身上添加

String title = dataSnapshot.child("title").getValue(String.class);
String description= dataSnapshot.child("description").getValue(String.class);
users.add(new User(title, description));

然后,最后,在您的列表上,点击修改其他内容

Intent intent = new Intent(getApplicationContext(),MainContent.class);
intent.putExtra("content_description", users.get(position).getDescription());
startActivity(intent);

注意:您还可以将整个对象放入意图中,但需要使User对象实现可拆分。

建议:使用适当的变量名和适当的类名。相信我,这很重要。例如,标题和内容不应该在User类中,它更像是在Book类中。

希望这能启发您的伴侣,欢呼