数据不显示在recyclerview中

tpxzln5u  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(350)

我正在尝试创建一个嵌套的recyclerview程序。所以,我编程了2 RecyclerView 对于list parent和list child,我在这个程序中创建了2个适配器,子适配器用作数据子项,适配器parent用于从数据子项检索数据项和列表,这意味着适配器parent有2个属性,即data parent和list child,以及在recycler parent中。列表的示例如下:嵌套的recyclerview
从图中可以看出,子类中的数据是根据项目数输入的,因为列表中输入的数据的布局是这样的:input data
从详细的活动(用于数据输入)中,我使用 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 result;
    }

    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:my github 项目
对于上面的项目,我总结了一点,我仍然对如何检索数据并使用循环显示数据感到困惑,我仍然停留在 for 循环。

g6baxovj

g6baxovj1#

这不会像在两种方法中一样起作用,您可以这样做:

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 通过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或者你想要的任何值。

相关问题