Java 使用Firebase实现自定义列表适配器
我想将包含文本和图像的自定义适配器链接到Firebase,以便从Firebase中检索Java 使用Firebase实现自定义列表适配器,java,android,listview,firebase,firebase-realtime-database,Java,Android,Listview,Firebase,Firebase Realtime Database,我想将包含文本和图像的自定义适配器链接到Firebase,以便从Firebase中检索listView项中的两个(文本和图像) 这是我当前的代码: // Get ListView object from xml final ListView listView = (ListView) findViewById(R.id.listView); // Create a new Adapters final ArrayAdapter<String> adapter
listView
项中的两个(文本和图像)
这是我当前的代码:
// Get ListView object from xml
final ListView listView = (ListView) findViewById(R.id.listView);
// Create a new Adapters
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
R.layout.custom_list_view_item, R.id.text);
final ArrayAdapter<String> adapter2 = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, R.id.text);
final ArrayAdapter<String> adapter3 = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, R.id.text);
listView.setAdapter(adapter);
// Enabling Offline
if (Firebase.getDefaultConfig().isPersistenceEnabled() == false)
Firebase.getDefaultConfig().setPersistenceEnabled(true);
// Use Firebase
Firebase.setAndroidContext(this);
new Firebase(firebaseURL)
.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
adapter.add((String) dataSnapshot.child("text").getValue());
adapter2.add((String) dataSnapshot.child("image0").getValue());
adapter3.add((String) dataSnapshot.child("image1").getValue());
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
adapter.remove((String) dataSnapshot.child("text").getValue());
adapter2.remove((String) dataSnapshot.child("image0").getValue());
adapter3.remove((String) dataSnapshot.child("image1").getValue());
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(FirebaseError firebaseError) {
}
});
// Open details when items when clicked
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
new Firebase(firebaseURL)
.orderByChild("text")
.equalTo((String) listView.getItemAtPosition(position))
.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChildren()) {
DataSnapshot firstChild = dataSnapshot.getChildren().iterator().next();
firstChild.getRef();
String d = adapter.getItem(position);
String image0 = adapter2.getItem(position);
String image1 = adapter3.getItem(position);
Intent i = new Intent(List_mall.this, Details_malls.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("text", d);
i.putExtra("image0", image0);
i.putExtra("image1", image1);
startActivity(i);
}
}
public void onCancelled(FirebaseError firebaseError) {
}
});
}
});
//从xml获取ListView对象
最终ListView ListView=(ListView)findViewById(R.id.ListView);
//创建一个新的适配器
最终ArrayAdapter适配器=新的ArrayAdapter(此,
R.layout.custom_list_view_item,R.id.text);
最终阵列适配器2=新阵列适配器(此,
android.R.layout.simple_list_item_1,R.id.text);
最终阵列适配器3=新阵列适配器(此,
android.R.layout.simple_list_item_1,R.id.text);
setAdapter(适配器);
//启用脱机
if(Firebase.getDefaultConfig().isPersistenceEnabled()==false)
Firebase.getDefaultConfig().setPersistenceEnabled(true);
//使用火基
Firebase.setAndroidContext(this);
新Firebase(firebaseURL)
.addChildEventListener(新的ChildEventListener(){
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
add((字符串)dataSnapshot.child(“text”).getValue());
adapter2.add((字符串)dataSnapshot.child(“image0”).getValue());
adapter3.add((字符串)dataSnapshot.child(“image1”).getValue());
}
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
adapter.remove((字符串)dataSnapshot.child(“text”).getValue());
adapter2.remove((字符串)dataSnapshot.child(“image0”).getValue());
adapter3.remove((字符串)dataSnapshot.child(“image1”).getValue());
}
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
}
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
取消后的公共无效(FirebaseError FirebaseError){
}
});
//单击项目时打开详细信息
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
最终整数位置,长id){
新Firebase(firebaseURL)
.orderByChild(“文本”)
.equalTo((字符串)listView.getItemAtPosition(位置))
.addListenerForSingleValueEvent(新的ValueEventListener(){
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.hasChildren()){
DataSnapshot firstChild=DataSnapshot.getChildren().iterator().next();
firstChild.getRef();
字符串d=适配器.getItem(位置);
字符串image0=adapter2.getItem(位置);
字符串image1=adapter3.getItem(位置);
意向i=新意向(列表、详细信息、类别);
i、 设置标志(意图、标志、活动、新任务);
i、 putExtra(“文本”,d);
i、 putExtra(“image0”,image0);
i、 putExtra(“图像1”,图像1);
星触觉(i);
}
}
取消后的公共无效(FirebaseError FirebaseError){
}
});
}
});
您需要一个适配器,而不是三个。从这里开始@cricket\u 007感谢您提供的有用链接,现在我了解了自定义适配器,但仍然无法在我的代码中用Firebase替换它,请您提供更多说明?就像您需要一个模型
类。您的dataSnapshot
表示Model
。然后将一个ArrayAdapter
设置到listView。@cricket_007谢谢,您能为我提供Firebase自定义列表视图的教程吗。非常感谢您的支持。请先使用自定义适配器。稍后添加Firebase。这是我的建议,这是我的第一个链接向您展示的。您需要一个适配器,而不是三个。从这里开始@cricket\u 007感谢您提供的有用链接,现在我了解了自定义适配器,但仍然无法在我的代码中用Firebase替换它,请您提供更多说明?就像您需要一个模型
类。您的dataSnapshot
表示Model
。然后将一个ArrayAdapter
设置到listView。@cricket_007谢谢,您能为我提供Firebase自定义列表视图的教程吗。非常感谢您的支持。请先使用自定义适配器。稍后添加Firebase。这是我的建议,这就是我的第一个链接向您展示的内容。