Java 如何在android中基于用户输入生成多个cardview
我正在尝试设计一个页面,其中地址存储在recycler view->cardview中 当用户单击活动A中的“添加地址”按钮时,用户将被导航到活动B中的“添加地址”页面。在此,用户可以输入客户名称、地址行1和地址行2 在活动B中单击“保存”按钮后,应在活动a中的“添加地址”按钮下创建cardview 此设计与亚马逊移动应用程序添加地址选项类似。 示例:如果最终用户有一个地址(将出现一个cardview)并希望再添加一个地址(第二个地址)。然后,将在现有cardview下方创建另一个具有新地址的cardview 目前的实际结果:第二个地址正在第一个cardview中填充。 预期结果:当用户输入新地址时,应在现有地址下方创建新的cardview 活动A中的代码Java 如何在android中基于用户输入生成多个cardview,java,android,android-activity,android-recyclerview,android-cardview,Java,Android,Android Activity,Android Recyclerview,Android Cardview,我正在尝试设计一个页面,其中地址存储在recycler view->cardview中 当用户单击活动A中的“添加地址”按钮时,用户将被导航到活动B中的“添加地址”页面。在此,用户可以输入客户名称、地址行1和地址行2 在活动B中单击“保存”按钮后,应在活动a中的“添加地址”按钮下创建cardview 此设计与亚马逊移动应用程序添加地址选项类似。 示例:如果最终用户有一个地址(将出现一个cardview)并希望再添加一个地址(第二个地址)。然后,将在现有cardview下方创建另一个具有新地址的c
public class ProfileManageAdressFragment extends AppCompatActivity {
RecyclerView recyclerView;
ProfileManageAddressRecyclerAdapter adapter;
ArrayList<ProfileManageAddressGetterSetter> reviews;
private Button addAddress;
private String customer_name, address_one, address_two, city, state, pincode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_profile_manage_adress);
addAddress = findViewById(R.id.addNewAddress);
addAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(ProfileManageAdressFragment.this, AddNewAddress.class);
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1) {
if(resultCode == RESULT_OK) {
customer_name = data.getStringExtra("customer_name");
address_one = data.getStringExtra("address_one");
address_two = data.getStringExtra("address_two");
city = data.getStringExtra("city");
state = data.getStringExtra("state");
pincode = data.getStringExtra("pincode");
reviews = new ArrayList<>();
reviews.add(new ProfileManageAddressGetterSetter(customer_name, address_one, address_two, city, state, pincode));
recyclerView = findViewById(R.id.addressRecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(ProfileManageAdressFragment.this));
adapter = new ProfileManageAddressRecyclerAdapter(ProfileManageAdressFragment.this, reviews);
recyclerView.setAdapter(adapter);
}
}else if(resultCode == RESULT_CANCELED) {
Toast.makeText(ProfileManageAdressFragment.this, "Cancelled", Toast.LENGTH_SHORT).show();
}
}
}
如果需要更多信息,请告诉我。万分感谢您提供的解决方案!:) 所以,正如我所认为的,问题在于这方面
reviews = new ArrayList<>();
reviews.add(new ProfileManageAddressGetterSetter(customer_name, address_one, address_two, city, state, pincode));
reviews=newarraylist();
添加(新ProfileManageAddressGetterSetter(客户名称、地址一、地址二、城市、州、pincode));
您正在使用一个项目创建ArrayList的新对象,而不是更新现有项目。之后,您将创建适配器的另一个对象,而不是使用现有对象并刷新其数据。这就是为什么你看不到另一个CardView被填充的原因
尝试添加到适配器的下一个功能:
void addItems(items: ArrayList<ProfileManageAddressGetterSetter>) {
this.items.addAll(items);
notifyDataSetChanged();
}
void附加项(项:ArrayList){
this.items.addAll(items);
notifyDataSetChanged();
}
当您从ActivityB收到结果时,请借助附加项(items:ArrayList)
函数将其插入适配器
为了更好地使用适配器,请将其变量作为全局变量保留在活动类中,并在需要时调用它。因此,正如我所想,问题在于这几行
reviews = new ArrayList<>();
reviews.add(new ProfileManageAddressGetterSetter(customer_name, address_one, address_two, city, state, pincode));
reviews=newarraylist();
添加(新ProfileManageAddressGetterSetter(客户名称、地址一、地址二、城市、州、pincode));
您正在使用一个项目创建ArrayList的新对象,而不是更新现有项目。之后,您将创建适配器的另一个对象,而不是使用现有对象并刷新其数据。这就是为什么你看不到另一个CardView被填充的原因
尝试添加到适配器的下一个功能:
void addItems(items: ArrayList<ProfileManageAddressGetterSetter>) {
this.items.addAll(items);
notifyDataSetChanged();
}
void附加项(项:ArrayList){
this.items.addAll(items);
notifyDataSetChanged();
}
当您从ActivityB收到结果时,请借助附加项(items:ArrayList)
函数将其插入适配器
为了更好地使用适配器,请将其变量保留为活动类中的全局变量,并在需要时调用它。有许多事情需要处理 在ProfileManagedAddressFragment中
- 命名约定更重要的是扩展了AppCompatActivity,类名是ProfileManageAddressFragment
- 全局创建的按钮对象不是必需的,将其设为本地对象
- 在onActivityResult中使用相同的字符串customer_名称和更多的obj,因此不需要全局初始化,使其成为本地obj
- 在onActivityResult中,每次重新初始化不需要的recyclerView和适配器时。在onCreate中初始化recyclerView和适配器,并在onActivityResult中获取数据时将数据添加到ArrayList并调用adapter.notifyDataSetChange
- 在onActivityResult中,对请求代码和结果代码使用嵌套条件使其处于单个条件下,如。如果(requestCode==1&&resultCode==RESULT_OK){code body}else{}
- 所有全局初始化对象不需要它只需要内存。因此,如果您没有在方法之外使用,请在本地使用它
- android提供一个类TextUtil,TextUtil有一个方法,而不是像customer_name.getText().toString().equals(“”)这样检查值。请空使用该方法
- 命名约定更重要的是扩展了AppCompatActivity,类名是ProfileManageAddressFragment
- 全局创建的按钮对象不是必需的,将其设为本地对象
- 在onActivityResult中使用相同的字符串customer_名称和更多的obj,因此不需要全局初始化,使其成为本地obj
- 在onActivityResult中,每次重新初始化不需要的recyclerView和适配器时。在onCreate中初始化recyclerView和适配器,并在onActivityResult中获取数据时将数据添加到ArrayList并调用adapter.notifyDataSetChange
- 在onActivityResult中,对请求代码和结果代码使用嵌套条件使其处于单个条件下,如。如果(requestCode==1&&resultCode==RESULT_OK){code body}else{}
- 所有全局初始化对象不需要它只需要内存。因此,如果您没有在方法之外使用,请在本地使用它
- android提供一个类TextUtil,TextUtil有一个方法,而不是像customer_name.getText().toString().equals(“”)这样检查值。请空使用该方法
- 有很多事情你必须处理
在ProfileManagedAddressFragment中