【问题标题】:How can I retrieve data from Firebase in new activity when an item in Listview is being clicked?单击 Listview 中的项目时,如何在新活动中从 Firebase 检索数据?
【发布时间】: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 数据库。

【问题讨论】:

  • 所有这些代码中究竟有什么不符合您的预期?

标签: android firebase listview firebase-realtime-database


【解决方案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) {

        }
    });


        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2020-06-02
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多