我正在尝试创建一个嵌套的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
循环。
1条答案
按热度按时间g6baxovj1#
这不会像在两种方法中一样起作用,您可以这样做:
请注意,您创建了一个
ArrayList
通过arraylist(),初始容量为10,但元素的大小/数量为0,然后尝试遍历空列表。for循环永远不会作为ArrayList#size()
返回0。您可能希望将for循环改为执行以下操作:
注意,我删除了对
ArrayList#size()
而是用一个常量,比如10或者你想要的任何值。