代码之家  ›  专栏  ›  技术社区  ›  Hessam-Emami

如何在mainActivity中设置ExpandableListView的子视图

  •  0
  • Hessam-Emami  · 技术社区  · 7 年前

    我刚刚完成了自定义ExpandableListView适配器的实现, 现在在主要活动中,我不知道如何为我的两个自定义ArrayList(一个用于groupView,另一个用于childView)编写代码。 ExpandableListView的GroupView工作正常,但我不知道应该如何编写代码并设置子视图的数据。

    让我们考虑组和子视图的所有数据,如下所示:

    X.add(new Word(R.drawable.ic_launcher_background,"A" , "#11111"));
    

    因此,ExpandableListView的子视图和组视图的行中都有两个文本和一个img。

    -谢谢

    主要活动。JAVA

    public class MainActivity extends Activity {
    
        private ExpandListAdapter ExpAdapter;
        private ArrayList<Word> ExpListItems;
        private ExpandableListView ExpandList;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ExpandList = (ExpandableListView) findViewById(R.id.lvExp);
            ExpAdapter = new ExpandListAdapter(MainActivity.this, ExpListItems);
    
            ExpListItems = new ArrayList<Word>();
            ExpListItems.add(new Word(R.drawable.ic_launcher_background,"A" , "#11111"));
            ExpListItems.add(new Word(R.drawable.ic_launcher_background,"B" , "#11111"));
            ExpListItems.add(new Word(R.drawable.ic_launcher_background,"C" , "#11111"));
            ExpListItems.add(new Word(R.drawable.ic_launcher_background,"D" , "#11111"));
            ExpListItems.add(new Word(R.drawable.ic_launcher_background,"E" , "#11111"));
            ExpListItems.add(new Word(R.drawable.ic_launcher_background,"F" , "#11111"));
    
            ExpandList.setAdapter(ExpAdapter);
    
    
        }
    

    ExpandListAdapter。java(删除不必要的代码)

        public class ExpandListAdapter extends BaseExpandableListAdapter {
        public Context context;
        public ArrayList<Word> groups ;
    
            public ExpandListAdapter(Context context, ArrayList<Word> groups) {
                this.context = context;
                this.groups = groups;
            }
    
            @Override
            public int getGroupCount() {
                return groups.size();
            }
    
            @Override
            public int getChildrenCount(int i) {
                ArrayList<Word> childList = groups.get(i).getItems();
                return childList.size();
            }
    
    
    
            @Override
            public Object getChild(int i, int i1) {
                ArrayList<Word> childList = groups.get(i).getItems();
                return childList.get(i1);
            }
        .
    .
    .
    
    
            @Override
            public long getChildId(int i, int i1) {
                return i1;
            }
    
            .
            .
            .
            .
    
            @Override
            public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
                View listItemView = view;
                if(listItemView == null) {
                    LayoutInflater inflater = (LayoutInflater) this.context
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    assert inflater != null;
                    listItemView = inflater.inflate(R.layout.child_row,null);
                }
    
                Word currentWord = groups.get(i);
                TextView nameText = (TextView) listItemView.findViewById(R.id.childNameView);
                nameText.setText(currentWord.getBakhsh());
    
    
                TextView numberText = (TextView) listItemView.findViewById(R.id.childNumView);
                numberText.setText(currentWord.getNumber());
    
    
                ImageView imageIcons = (ImageView) listItemView.findViewById(R.id.childImageView);
                if (currentWord.hasImage()) {
                    imageIcons.setImageResource(currentWord.getImage());
    
    
                return listItemView;
    
            }
    
            @Override
            public boolean isChildSelectable(int i, int i1) {
                return true;
            }
        }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   i_A_mok    7 年前

    您可以将子项放置到地图中,其中组中的唯一字段作为键,因此可能如下所示:

    onCreate():

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ExpandList = (ExpandableListView) findViewById(R.id.lvExp);
    
        ExpListItems = new ArrayList<Word>();
        ExpListItems.add(new Word(R.drawable.ic_launcher_background, "A" , "#11111"));
        ExpListItems.add(new Word(R.drawable.ic_launcher_background, "B" , "#11111"));
        ExpListItems.add(new Word(R.drawable.ic_launcher_background, "C" , "#11111"));
        ExpListItems.add(new Word(R.drawable.ic_launcher_background, "D" , "#11111"));
        ExpListItems.add(new Word(R.drawable.ic_launcher_background, "E" , "#11111"));
        ExpListItems.add(new Word(R.drawable.ic_launcher_background, "F" , "#11111"));
        Map<String, List<Word>> mapChild = new HashMap<>();
        for(Word word: ExpListItems){
            List<Word> listChild = new ArrayList<>();
            listChild.add(new Word(R.drawable.ic_launcher_background, "Aa" , "#11111"));
            listChild.add(new Word(R.drawable.ic_launcher_background, "Bb" , "#11111"));
            listChild.add(new Word(R.drawable.ic_launcher_background, "Cc" , "#11111"));
            mapChild.put(word.getBakhsh(), listChild);
        }
    
        ExpAdapter = new ExpandListAdapter(MainActivity.this, ExpListItems, mapChild);
        ExpandList.setAdapter(ExpAdapter);
    }
    

    您的适配器:

    public class ExpandListAdapter extends BaseExpandableListAdapter {
    public Context context;
    public ArrayList<Word> groups ;
    public Map<String, List<Word>> childs;
    
    public ExpandListAdapter(Context context, ArrayList<Word> groups, Map<String, List<Word>> childs) {
        this.context = context;
        this.groups = groups;
        this.childs = childs;
    }
    
    @Override
    public int getGroupCount() {
        return groups.size();
    }
    
    @Override
    public int getChildrenCount(int i) {
        return childs.get(groups.get(i).getBakhsh()).size();
    }
    
    @Override
    public Word getGroup(int i) {
        return groups.get(i);
    }
    
    @Override
    public Word getChild(int i, int i1) {
        return childs.get(groups.get(i).getBakhsh()).get(i1);
    }
    
    @Override
    public long getGroupId(int i) {
        return i;
    }
    
    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }
    
    @Override
    public boolean hasStableIds() {
        return false;
    }
    
    @Override
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
        View listItemView = view;
        if (listItemView == null) {
            LayoutInflater inflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;
            listItemView = inflater.inflate(R.layout.child_row, null);
        }
    
        Word currentWord = getGroup(i);
        TextView nameText = (TextView) listItemView.findViewById(R.id.childNameView);
        nameText.setText(currentWord.getBakhsh());
    
        TextView numberText = (TextView) listItemView.findViewById(R.id.childNumView);
        numberText.setText(currentWord.getNumber());
    
        ImageView imageIcons = (ImageView) listItemView.findViewById(R.id.childImageView);
        if (currentWord.hasImage()) {
            imageIcons.setImageResource(currentWord.getImage());
        }
        return listItemView;
    }
    
    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
        View listItemView = view;
        if (listItemView == null) {
            LayoutInflater inflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;
            listItemView = inflater.inflate(R.layout.child_row, null);
        }
    
        Word currentWord = getChild(i,i1);
        TextView nameText = (TextView) listItemView.findViewById(R.id.childNameView);
        nameText.setText(currentWord.getBakhsh());
    
        TextView numberText = (TextView) listItemView.findViewById(R.id.childNumView);
        numberText.setText(currentWord.getNumber());
    
        ImageView imageIcons = (ImageView) listItemView.findViewById(R.id.childImageView);
        if (currentWord.hasImage()) {
            imageIcons.setImageResource(currentWord.getImage());
        }
        return listItemView;
    }
    
    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }
    }  
    

    我在这里回答了关于ExpandableListView的另一个问题: Tree with checkBox ,您也可以尝试该示例。希望有帮助!