Данные не отображаются в RecyclerView

#java #android #arraylist #android-recyclerview

#java #Android #arraylist #android-recyclerview

Вопрос:

Я пытаюсь создать вложенную программу RecyclerView. Итак, я запрограммировал 2 RecyclerView для родительского списка и дочернего списка, и из этой программы я создаю 2 адаптера, дочерний адаптер предназначен как подпункты данных, а родительский адаптер — для извлечения элементов данных и списков из подпунктов данных, что означает, что родительский адаптер имеет 2 атрибута, а именно родительский элемент данных и списокдочерний элемент и родительский элемент recycler. Иллюстрация для списка выглядит следующим образом: Вложенный RecyclerView

Как видно из рисунка на иллюстрации, данные из дочернего класса вводятся в соответствии с количеством элементов, поскольку схема ввода данных для списка выглядит следующим образом: Входные данные

И из подробного действия (для ввода данных) Я использую функции putExtra и getStringExtra для отправки входных данных друг другу.

DetailActivity.java

 public class DetailActivity extends AppCompatActivity implements View.OnClickListener {

    LinearLayout layoutRow;
    List<Childs> titleList = new ArrayList<>();
    String txname, txsubname;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        layoutRow = findViewById(R.id.layout_list);
        EditText title = findViewById(R.id.edt_name);
        txname = title.getText().toString();
        findViewById(R.id.btn_add_item).setOnClickListener(this);
        findViewById(R.id.btn_submit).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_add_item:
                addView();
                break;
            case R.id.btn_submit:
                if(checkValidate()){
                    Intent intent = new Intent(this, MainActivity.class);
                    intent.putExtra("name",txname);
                    intent.putExtra("subname",txsubname);
                    startActivity(intent);
                }
        }
    }

    private boolean checkValidate(){
        titleList.clear();
        boolean result = true;

        for (int i = 0;i < layoutRow.getChildCount();i  ){

            View listview = layoutRow.getChildAt(i);
            EditText items = listview.findViewById(R.id.edt_item);
            txsubname = items.getText().toString();

            Childs childs = new Childs();

            if (!items.getText().toString().isEmpty()){
                childs.setTitle(items.getText().toString());
            } else {
                result = false;
                break;
            }

            titleList.add(childs);
        }

        if (titleList.size() == 0){
            result = false;
            Toast.makeText(this, "Data Kosong", Toast.LENGTH_SHORT).show();
        } else if(!result){
            Toast.makeText(this, "Semua Data Kosong!", Toast.LENGTH_SHORT).show();
        }

        return resu<
    }

    private void addView(){
        final View titleView = getLayoutInflater().inflate(R.layout.row_add_item,null,false);

        EditText txsubname = titleView.findViewById(R.id.edt_item);
        ImageButton btnClose = titleView.findViewById(R.id.bt_close_item);

        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                removeView(titleView);
            }
        });

        layoutRow.addView(titleView);
    }

    private void removeView(View titleView) {
        layoutRow.removeView(titleView);
    }
}
 

MainActivity.java (править)

 private List<Parents> ItemData() {
            List<Parents> listParent = new ArrayList<>();
            for(int i = 0; i < listParent.size();i  ){
                Parents parentsItem = new Parents(titles i,SubitemData());
                listParent.add(parentsItem);
            }

            return listParent;
        }

        private List<Childs> SubitemData() {
            List<Childs> listTitle = new ArrayList<>();
            for (int i = 0; i < listTitle.size();i  ){
                Childs childs = new Childs(subtitles i);
                listTitle.add(childs);
            }

            return listTitle;
        }
 

Здесь введенные данные не отображаются в RecyclerView . Если в классе есть функция, которую, по вашему мнению, невозможно понять, вы можете проверить полный код на моем github: мой проект github

Я немного заканчиваю для проекта выше, я все еще не понимаю, как извлекать данные, а затем отображать их с помощью цикла, я все еще застрял в состоянии for цикла.

Ответ №1:

Это не сработает, так как в обоих ваших методах вы делаете это:

 private List<Parents> ItemData() {
    List<Parents> listParent = new ArrayList<>();
    for(int i = 0; i < listParent.size();i  ){
        ...
    }

    return listParent;
}

private List<Childs> SubitemData() {
    List<Childs> listTitle = new ArrayList<>();
    for (int i = 0; i < listTitle.size();i  ){
        ...
    }

    return listTitle;
}
 

Обратите внимание, что вы создаете ArrayList via ArrayList(), который имеет начальную емкость 10, но размер / количество элементов 0, затем вы пытаетесь выполнить итерацию по пустому списку. Цикл for никогда не будет выполняться как ArrayList#size() возвращающий значение 0.

Вы бы хотели изменить свои циклы for, чтобы вместо этого сделать что-то вроде:

 private List<Parents> ItemData() {
    List<Parents> listParent = new ArrayList<>();
    for(int i = 0; i < 10; i  ){
        ...
    }

    return listParent;
}

private List<Childs> SubitemData() {
    List<Childs> listTitle = new ArrayList<>();
    for (int i = 0; i < 10; i  ){
        ...
    }

    return listTitle;
}
 

Обратите внимание, что я удалил вызовы ArrayList#size() и вместо этого использовал постоянное значение, например 10 или любое другое, которое вы хотите.

Комментарии:

1. из вашего ответа я хочу спросить, как функция цикла for может хранить данные в соответствии с вводом? поскольку из логики, которую я получил, класс list будет хранить данные через getStringExtra функцию, поэтому я беру значение list для условия цикла и сохраняю переменную из getStringExtra

2. Я не уверен в вашем вопросе, ваш getExtra просто возвращает строку в вашем примере… какова цель этой строки? Строка не является списком, она может быть преобразована в список с помощью чего-то значимого, например, пробела или каждой буквы и т. Д

3. Извините, я новичок, поэтому я не до конца понимаю это, но в целом я понимаю концепцию