簡體   English   中英

如何通過單擊android中的父節點在expandablelistview中動態獲取子元素

[英]How to get children elements dynamically within expandablelistview by clicking parent node in android

我是非常新的android所以任何人都可以非常輕松地解釋如何通過單擊父級來使childList動態化?

我的問題:我在expandablelistview中有一些靜態父級。 我的意圖是,當我選擇一個父母看到它的孩子時,孩子將動態地形成數據庫並且它們將是可導航的(我想看到更多細節或轉到另一個頁面。)

我分三步完成了靜態孩子。

  1. 使用expandablelistview創建XML文件。
  2. 在主java調用適配器上
  3. 使用expandablelistview綁定適配器。 創建自定義適配器

適配器如下:

package com.example.eschool_only_accrdion_straggle;

import android.R.color;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class My_custom_adapter extends BaseExpandableListAdapter {

    private Context context;

    String [] parentList={"Summer Fruit", "Winter Fruit", "Hard fruit", "Watery Fruit"};
    // String [][] childList={{"Lychy", "Mango"},{"Banana"},{"Pomy Granade"},{"pani Fruit"}};


    public My_custom_adapter(Context context) {
        this.context = context;
    }

    // In Here 1st Parameter is for PARENT and 2nd one is for CHILD

    @Override
    public Object getChild(int groupPosition, int childPosition) { 
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, 
            boolean arg2, View arg3, ViewGroup arg4) {

        TextView TxtV_child=new TextView(context);
        TxtV_child.setText(childList[groupPosition][childPosition]);
        TxtV_child.setPadding(35, 0, 0, 0);
        TxtV_child.setTextColor(Color.CYAN);
        TxtV_child.setTextSize(17);
        return TxtV_child;
    }

    @Override
    public int getChildrenCount(int groupPosition) {

        return childList[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {

        return groupPosition;
    }

    @Override
    public int getGroupCount() {
        // TODO Auto-generated method stub
        return parentList.length;
    }

    @Override
    public long getGroupId(int groupPosition) {
        // TODO Auto-generated method stub
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean childPosition, View arg2, ViewGroup arg3) {
        TextView TxtV_Parent=new TextView(context);
        TxtV_Parent.setText(parentList[groupPosition]);
        TxtV_Parent.setPadding(5, 5, 0, 5);
        TxtV_Parent.setTextColor(Color.MAGENTA);
        TxtV_Parent.setTextSize(25);
        return TxtV_Parent;
    }

    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return true;
    }

}                              

創建一個擴展“ExpandableListActivity”的活動,例如本教程

初始化您的數據

private ArrayList<String> groups = new ArrayList<String>() ;
private ArrayList<ArrayList<String>> children; 
private NewAdapter mNewAdapter = null;

public void onCreate(Bundle savedInstanceState) {

    // ....
    groups.add("Summer Fruit");
    groups.add("Winter Fruit");
    groups.add("Hard fruit");
    groups.add("Watery Fruit");

    children = new ArrayList<ArrayList<String>>();

    ArrayList<String> a = new ArrayList<String>();
    a.add("Lychy");
    a.add("Mango");
    children.add(a);

    a = new ArrayList<String>();
    a.add("Banana");
    children.add(a);

    a = new ArrayList<String>();
    a.add("Pomy Granade");
    children.add(a);


    a = new ArrayList<String>();
    a.add("pani Fruit");
    children.add(a);

    mNewAdapter = new NewAdapter(groups, children);
    mNewAdapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),this);
    getExpandableListView().setAdapter(mNewAdapter);
    int cpt = mNewAdapter.getGroupCount();
    for(int i = 0; i < cpt; i++ ){
        getExpandableListView().expandGroup(i);
    }
}

然后務必將以下方法覆蓋到您的活動中

@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
    // Do here what you need to do when a child is selected
    return true;
}

添加最后添加您的適配器

class NewAdapter extends BaseExpandableListAdapter{

    public LayoutInflater minflater;
    public Activity activity;
    public ArrayList<String> groups;
    public ArrayList<ArrayList<String>> points;

    public NewAdapter(ArrayList<String> groups, ArrayList<ArrayList<String>> points){
        this.groups = groups;
        this.points = points;
    }

    public void setInflater(LayoutInflater mInflater, Activity act) {
        this.minflater = mInflater;
        activity = act;
    }

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return null;
    }

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

    @Override
    public int getChildrenCount(int groupPosition) {
        return ((ArrayList<String>) points.get(groupPosition)).size();
    }

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

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

    @Override
    public void onGroupCollapsed(int groupPosition) {
        super.onGroupCollapsed(groupPosition);
    }

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

    @Override
    public View getGroupView(int groupPosition, boolean childPosition, View arg2, ViewGroup arg3) {
        // ...
        return v;
    }

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

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

    @Override
    public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View v, ViewGroup parent) {
        // ....
        return v;
    }
}

在適配器中,確保isChildSelectable(int groupPosition,int childPosition)返回“true”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM