单击 Listview 中的项目时,如何在新活动中从 Firebase 检索数据?

Posted

技术标签:

【中文标题】单击 Listview 中的项目时,如何在新活动中从 Firebase 检索数据?【英文标题】:How can I retrieve data from Firebase in new activity when an item in Listview is being clicked? 【发布时间】:2020-07-31 01:19:41 【问题描述】:

我正在开发一个应用,我使用 Firebase 作为我的数据库,并在 ListView 中显示了一些单词。

当我单击列表视图中的特定项目时,该词的数据应从 firebase 获取,并应显示在新活动中。

我已设法在列表视图中显示来自 firebase 的数据,但在用户单击项目时无法显示其他详细信息。

我已附上代码。

这是在列表视图中显示来自 firebase 的数据的活动。

仪表板.java

    public class Dashboard extends AppCompatActivity 

    ListView listView;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference dreff, ref;
    ArrayList<String> words;
    ArrayList<Word> words2;
    ArrayAdapter<String> adapter;
    Word word;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);
        listView = (ListView) findViewById(R.id.listView);
        firebaseDatabase = FirebaseDatabase.getInstance();
        dreff = firebaseDatabase.getReference("words");
        ref = firebaseDatabase.getReference("words");
        words = new ArrayList<>();
        words2 = new ArrayList<Word>();
        adapter = new ArrayAdapter<>(Dashboard.this, R.layout.word_info, R.id.word_info_list, words);

        dreff.addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for (DataSnapshot ds: dataSnapshot.getChildren())
                    word = ds.getValue(Word.class);
                    words.add("" + word.getWord().toString());
                
                listView.setAdapter(adapter);
            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 

            
        );

        ref.addChildEventListener(new ChildEventListener() 
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) 
                String word = dataSnapshot.child("word").getValue(String.class);
                String description = dataSnapshot.child("description").getValue(String.class);
                String tamil = dataSnapshot.child("tamilword").getValue(String.class);


                words2.add(new Word(word, description, tamil));
            

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

            

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) 

            

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

            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 

            
        );

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
                Intent intent = new Intent(Dashboard.this, Meaning.class);
                intent.putExtra("description", listView.getItemAtPosition(position).toString());
                startActivity(intent);
            
        );
    

这是 Word.java 类

Word.java

    public class Word 

    public String word;
    public String tamilword;
    public String description;


    public Word() 
    

    public Word(String word, String description, String tamil) 

    

    public String getWord() 
        return word;
    

    public void setWord(String word) 
        this.word = word;
    

    public String getTamilword() 
        return tamilword;
    

    public void setTamilword(String tamilword) 
        this.tamilword = tamilword;
    

    public String getDescription() 
        return description;
    

    public void setDescription(String description) 
        this.description = description;
    

现在我想在用户单击列表视图中的项目时显示其他详细信息。

我已在下面附加了 firebase 数据库。

【问题讨论】:

所有这些代码中究竟有什么不符合您的预期? 【参考方案1】:

好的,所以当您单击该项目时,请执行以下操作:

不是最好的方法,但只是为了让你明白,我建议你通过这个职位 到另一个活动并在打开的活动中进行获取

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 


   //fetch the details of the item

   dreff.child(String.valueOf(position+1)).addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
         //get details of the item
          String description = dataSnapshot.child("description").getValue(String.class);
          String image = dataSnapshot.child("image").getValue(String.class);
          String tamilword = dataSnapshot.child("tamilword").getValue(String.class);
          String word = dataSnapshot.child("word").getValue(String.class);

        //open another acivity and pass these


        

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 

        
    );


        
    );

【讨论】:

以上是关于单击 Listview 中的项目时,如何在新活动中从 Firebase 检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将项目添加到 listView(重复项增加数量)并在以下活动中查看?

如何使 ListView 中的项目打开一个新的空活动

Listview自定义过滤器在过滤列表中单击错误的项目

按下小部件ListView项目时Android开始活动

从 Activity 返回时如何获取最后一个 ListView 状态

单击图像时如何更改ListView中的图像?