У меня есть 2 массива в моем классе адаптера ExpandableListView, которые предоставляют моей группе и дочерним заголовкам фиктивные данные. Первый массив является обычным, а второй - двумерным.

public class ExpandableListViewAdapter extends BaseExpandableListAdapter {

String[] groupNames = {
        "Fall 2016", "Winter 2017",
        "Fall 2017", "Winter 2018",
        "Fall 2018", "Winter 2019",
        "Fall 2019", "Winter 2020"
};

String[][] childNames = {
        {"JAVA101", "MATH101", "CHEM101"},{"JAVA201", "MATH201", "CHEM201"},
        {"JAVA301", "MATH301", "CHEM301"},{"JAVA401", "MATH401", "CHEM401"},
        {"JAVA501", "MATH501", "CHEM501"},{"JAVA601", "MATH601", "CHEM601"},
        {"JAVA701", "MATH701", "CHEM701"},{"JAVA801", "MATH801", "CHEM801"}
};

И по мере необходимости я реализовал все необходимые методы и прикрепил их к своим массивам.

Context context;

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

    @Override
    public int getGroupCount() {
        return groupNames.length;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return childNames[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groupNames[groupPosition];
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childNames[groupPosition][childPosition];
    }

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

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View view, ViewGroup parent) {
        TextView textView = new TextView(context);
        textView.setText(groupNames[groupPosition]);
        textView.setPadding(100,0,0,0);
        textView.setTextColor(Color.BLACK);
        textView.setTextSize(20);

        return textView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent) {
        final TextView textView = new TextView(context);
        textView.setText("Java" + groupNames[childPosition] + "01");
        textView.setPadding(100,0,0,0);
        textView.setTextColor(Color.BLACK);
        textView.setTextSize(10);

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, textView.getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });

        return textView;
    }

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

Все отлично работает Что я хочу сделать, так это динамически добавлять данные в мой ExpandableListView с помощью кликов FAB. Мне больше всего интересно узнать, нужно ли мне реализовать мои onClick() функциональные возможности моей кнопки FAB внутри моего адаптера.

0
user7949690 27 Май 2017 в 23:43

2 ответа

Лучший ответ

Размер массива нельзя изменить. Если вы хотите больший массив, вам нужно создать новый. Лучшим решением было бы использовать {{X0} } который может расти по мере необходимости.

Поэтому создайте метод в своем адаптере для добавления новых элементов в существующий список. В метод добавьте свои новые элементы в ArrayList и вызовите .notifyDataSetChanged().

Заменить groupNames на

List<String> places = Arrays.asList("Fall 2016", "Winter 2017", "Fall 2017", "Winter 2018", "Fall 2018", "Winter 2019", "Fall 2019", "Winter 2020");

Для childNames вы должны сделать это следующим образом

List<String[]> childNames = Arrays.asList(new String[]{"JAVA101", "MATH101", "CHEM101"}, new String[]{ "JAVA201", "MATH201", "CHEM201" } etc...);

Или

List<String[]> childNames = new ArrayList<String[]>();
childNames.add(new String[]{"JAVA101", "MATH101", "CHEM101"});
//etc...

Вы также должны изменить свой адаптер, чтобы использовать ArrayLists вместо Arrays, надеюсь, вы поняли идею

0
Denny 27 Май 2017 в 22:18

в первую очередь для динамического добавления данных используйте ArrayList

  1. нет необходимости реализовывать onclick (); в адаптере добавить данные из активности по клику
  2. затем используйте notifyDatasetchanged (); на адаптере это сделает свое дело
0
akshay_shahane 27 Май 2017 в 20:52