gpt4 book ai didi

java - android 可扩展 ListView 从 firebase 检索数据

转载 作者:行者123 更新时间:2023-11-30 10:19:17 26 4
gpt4 key购买 nike

我如何使用 firebase 为我的 Expandable listview 检索数据。我的 firebase 节点是这样的..

Firebase Node

适配器类:

public class CustomExpandableListViewAdapter extends BaseExpandableListAdapter {

private Context context;
private List<String> headerItem;
private HashMap<String, List<String>> childItem;


public CustomExpandableListViewAdapter(Context context, List<String> headerItem, HashMap<String, List<String>> childItem) {
this.context = context;
this.headerItem = headerItem;
this.childItem = childItem;
}

@Override
public Object getChild(int groupPosition, int childPosition) {
return childItem.get(headerItem.get(groupPosition)).get(childPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.child_items, null);
}
TextView tv = convertView.findViewById(R.id.tvChildItem);
tv.setText(childText);

return convertView;

}

@Override
public int getChildrenCount(int groupPosition) {
return childItem.get(headerItem.get(groupPosition)).size();
}

@Override
public Object getGroup(int groupPosition) {
return headerItem.get(groupPosition);
}

@Override
public int getGroupCount() {
return headerItem.size();
}

@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.group_items, null);
}
TextView tv = convertView.findViewById(R.id.tvItemHeader);
tv.setText(headerTitle);
return convertView;
}

@Override
public boolean hasStableIds() {
return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

主要 Activity :

public class MainActivity extends AppCompatActivity {

ExpandableListView expandableListView;
CustomExpandableListViewAdapter customExpandableListViewAdapter;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;

FirebaseDatabase database;
DatabaseReference myRef;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

database = FirebaseDatabase.getInstance();
myRef = database.getReference("Expandable ListView Data");

expandableListView = findViewById(R.id.expLv);
SetStandardGroups();
customExpandableListViewAdapter = new CustomExpandableListViewAdapter(this, listDataHeader, listDataChild);
expandableListView.setAdapter(customExpandableListViewAdapter);
}

public void SetStandardGroups() {

listDataHeader = new ArrayList<>();
listDataChild = new HashMap<>();

myRef.addChildEventListener(new ChildEventListener() {
int counter = 0;
List<String> childItem = new ArrayList<>();

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

final String headerTitle = dataSnapshot.getKey();
listDataHeader.add(headerTitle);
Log.e("TAG", headerTitle);

for (DataSnapshot ds : dataSnapshot.getChildren()){
String child = (String) ds.getValue();
childItem.add(child);
}

listDataChild.put(listDataHeader.get(counter), childItem);
counter++;
Log.e("TAG", "counter :" + counter);


customExpandableListViewAdapter.notifyDataSetChanged();
}

@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(DatabaseError databaseError) {

}
});

}
}

输出是这样的: Out put

我需要 Task1 第一个项目的标题标题,它包含 8 个 child ,像 2nd Task2 第二个项目的标题标题,它将包含 5 个 child 的第三个任务3是第3个项目的标题,将包含10个 child 我怎么能实现请帮助我,我是firebase的新手谢谢......

最佳答案

终于找到问题了。问题是我为 child 创建了一个 ArrayList 对象,它运行 3 次并将所有数据保存在一个对象中,所以我发现我需要相应地创建 ArrayList 对象来循环 Turn's,即 3。这是现在可以使用的代码。

myRef.addChildEventListener(new ChildEventListener() {
int counter = 0;
List<String> childItem;

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

listDataHeader.add(dataSnapshot.getKey());
Log.e("TAG", listDataHeader.get(counter));
childItem = new ArrayList<>();

for (DataSnapshot ds : dataSnapshot.getChildren()) {
String childNames = (String) ds.getValue();
Log.e("TAG", "childNames :" + childNames);
childItem.add(childNames);
}

listDataChild.put(listDataHeader.get(counter), childItem);
counter++;
Log.e("TAG", "counter :" + counter);

customExpandableListViewAdapter.notifyDataSetChanged();
}

关于java - android 可扩展 ListView 从 firebase 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48681307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com