[英]How to pass data from a activity to a recycler view adapter in android
我正在尝试设计一个页面,其中地址存储在回收站视图-> 卡片视图中。
当用户从Activity A中单击添加地址按钮时,用户被导航到Activity B中的添加地址页面。 在这里,用户可以输入客户名称、地址行 1 和地址行 2。
在Activity B中单击保存按钮后,应在Activity A的添加地址按钮下创建一个卡片视图。
这种设计就像亚马逊移动应用添加地址选项一样。
谁能给我一个示例,将保存的数据从活动传递到回收器适配器。 我知道如何使用 putExtra 等将数据从回收器适配器传递到活动。
请帮助我。 百万提前谢谢!
活动 A 中的代码(添加地址按钮可用且回收站视图存在的位置)
public class ProfileManageAdressFragment extends AppCompatActivity {
RecyclerView recyclerView;
ProfileManageAddressRecyclerAdapter adapter;
ArrayList<ProfileManageAddressGetterSetter> reviews;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_profile_manage_adress);
Button addAddress = findViewById(R.id.addNewAddress);
reviews = new ArrayList<>();
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);
startActivity(intent);
}
});
}
}
负责在Activity A中添加卡片视图的代码段。 请让我知道如何在 Activity 中单击按钮时调用以下代码
reviews.add(new ProfileManageAddressGetterSetter("Customer Name", "address line 1", "address line 2"));
recyclerView = findViewById(R.id.addressRecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(ProfileManageAdressFragment.this));
adapter = new ProfileManageAddressRecyclerAdapter(this, reviews);
recyclerView.setAdapter(adapter);
Recycler 适配器中的代码
public class ProfileManageAddressRecyclerAdapter extends RecyclerView.Adapter<ProfileManageAddressRecyclerAdapter.ViewHolder> {
private ArrayList<ProfileManageAddressGetterSetter> mDataset = new ArrayList<>();
private Context context;
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView customer_name, address_one, address_two;
private Button edit, remove;
public ViewHolder(View v) {
super(v);
customer_name = (TextView) v.findViewById(R.id.customerName);
address_one = (TextView) v.findViewById(R.id.addressLineOne);
address_two = v.findViewById(R.id.addressLineTwo);
}
}
public ProfileManageAddressRecyclerAdapter(View.OnClickListener profileManageAdressFragment, ArrayList<ProfileManageAddressGetterSetter> dataset) {
mDataset.clear();
mDataset.addAll(dataset);
}
@Override
public ProfileManageAddressRecyclerAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_manage_address, parent, false);
ProfileManageAddressRecyclerAdapter.ViewHolder vh = new ProfileManageAddressRecyclerAdapter.ViewHolder(view);
return vh;
}
@Override
public void onBindViewHolder(@NonNull ProfileManageAddressRecyclerAdapter.ViewHolder holder, int position) {
ProfileManageAddressGetterSetter profileManageAddressGetterSetter = mDataset.get(position);
holder.address_one.setText(profileManageAddressGetterSetter.getAddress_line_1());
holder.address_two.setText(profileManageAddressGetterSetter.getGetAddress_line_2());
holder.customer_name.setText(profileManageAddressGetterSetter.getContractor_name());
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
在此处输入图像描述- 使用上述意图尝试从适配器调用后,结果为 0。
活动 B 中的代码
public class AddNewAddress extends AppCompatActivity {
private EditText customer_name, address_one, address_two;
private TextView cancel;
private Button add_address;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_new_address);
customer_name = findViewById(R.id.customerName);
address_one = findViewById(R.id.addressOne);
address_two = findViewById(R.id.addressTwo);
add_address = findViewById(R.id.addAddress);
cancel = findViewById(R.id.completeCancel);
String cancel_text = "Cancel";
SpannableString spanableObject = new SpannableString(cancel_text);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(AddNewAddress.this, "Clicked", Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.BLUE);
}
};
spanableObject.setSpan(clickableSpan, 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
cancel.setText(spanableObject);
cancel.setMovementMethod(LinkMovementMethod.getInstance());
final ProfileManageAdressFragment profileManageAdressFragment = new ProfileManageAdressFragment();
add_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(AddNewAddress.this, ProfileManageAdressFragment.class);
startActivity(intent);
}
});
}
private void setFragment(android.support.v4.app.Fragment fragment) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.main_frame, fragment).commit();
}
}
更新 1:
请检查我更新的 Recycler 适配器。 当我运行时,此 0 显示在文本区域中,如附图所示。 我是 android 的新手。 请帮忙举个例子。
我终于通过使用 ActivityResult 实现了我的目标。 现在我可以将数据从 Activity 传递到 Cardview。
解决方案:在 Activity A 中单击按钮时,我使用 startResultActivity() 启动 Activity。 后来,当我触发了Activity B。 最终用户输入数据并使用 putExtra() 传递数据,一旦在 Activity B 中单击保存按钮,则在 Activity B 中单击 setResult() 和 finish()。
最后我在 Activity A 中定义 onActivityResult() 来得到结果。 效果很好!!
我会创建一个全局变量,然后将所有数据存储在该变量中,然后只需在适配器中调用该变量。
声明一个全局变量并为其分配 null 值:
public static String checking = null;
然后在需要时存储数据:
checking = check.getText().toString();
然后在您的适配器 class 中调用它。
首先在侦听器中制作接口侦听器,使用这样的参数制作 function
interface YourRecycleViewClickListener {
fun onItemClickListener(param1:View, param2: String)
}
现在扩展您的活动
class YourActivity:YourRecycleViewClickListener{
override fun onItemClickListener(param1:View, param2: String) {
//do any thing
}
}
第三步在你的回收适配器中制作接口契约
class YourAdapter(
private val listener: YourRecycleViewClickListener){
holder.constraintLayout.setOnClickListener{
listener.onItemClickListener(param1,param2)
}
}
这是 kotlin lang 和 java 相同但更改语法
这一切都要做
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.