我是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) {
}
});
}
}`
答案 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
类中。
希望这能启发您的伴侣,欢呼