单击 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(重复项增加数量)并在以下活动中查看?