[英]android expandable listview retrieve data from firebase
how can i use firebase
to retrieve data for my Expandable listview
.如何使用firebase
检索Expandable listview
数据。 my firebase
node is like this..我的firebase
节点是这样的..
Adapter class:适配器类:
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;
}
MainActivity :主要活动 :
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) {
}
});
}
}
The out put is this: Out put输出是这样的:输出
and i need Task1 the header tittle of first item and its contains 8 child's and like 2nd Task2 the header tittle of 2nd item and it will contains 5 child's and 3rd Task3 the header tittle of 3rd item and will contain's 10 child how can i achieved please help me i new to firebase Thanks...我需要 Task1 第一个项目的标题标题,它包含 8 个孩子的标题,像第二个任务2第二个项目的标题标题,它将包含 5 个孩子的标题标题和第三个任务 3 第三个项目的标题标题,将包含 10 个孩子,我该如何实现帮助我,我是 firebase 新手谢谢...
At last i found the problem.最后我发现了问题。 the problem is that i create a single Object of ArrayList for child which runs 3 times and save all data in one Object, so i found out that i need to create ArrayList Object Accordingly to loop Turn's which is 3. this is the code which is working now.问题是我为孩子创建了一个单一的 ArrayList 对象,它运行了 3 次并将所有数据保存在一个对象中,所以我发现我需要创建 ArrayList 对象相应地循环 Turn 的 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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.