android - 从列表视图项中的按钮调用片段
问题描述
我有一个ListView
,Fragment
在我的 ListView 的项目中,我有一个Button
如何通过单击按钮调用另一个Fragment
自定义并保留项目信息?DialogFragment
解决方案
您可以使用接口,在适配器类中创建一个接口,然后从所有者片段中设置它,当用户单击按钮调用接口方法时
适配器类:
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {
private ArrayList<AddressModel> dataset;
private WeakReference<Activity> activity;
private onChecked listener;
public TestAdapter(Activity activity, ArrayList<AddressModel> datasett) {
this.dataset = datasett;
this.activity = new WeakReference<Activity>(activity);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(activity.get()).inflate(R.layout.item_popup_change_address_step_two, null);
TextView tv = (TextView) rootView.findViewById(R.id.title_itemPopUp_ChangeAddress_TV);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
tv.setBackground(ContextCompat.getDrawable(parent.getContext(), R.drawable.edittext_style));
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
rootView.setLayoutParams(lp);
return new ViewHolder(rootView);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.title.get().setText(dataset.get(position).getTitle());
holder.rootView.get().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) //call interface
listener.chekedListener(dataset.get(position));
}
});
}
@Override
public int getItemCount() {
if (dataset == null)
return 0;
return dataset.size();
}
public void setListener(onChecked listener) {
this.listener = listener;
}
public interface onChecked {
void chekedListener(AddressModel addressClass_serialized);
}
public class ViewHolder extends RecyclerView.ViewHolder {
private WeakReference<TextView> title;
private WeakReference<LinearLayout> rootView;
public ViewHolder(View itemView) {
super(itemView);
title = new WeakReference<TextView>((TextView) itemView.findViewById(R.id.title_itemPopUp_ChangeAddress_TV));
rootView = new WeakReference<LinearLayout>((LinearLayout) itemView.findViewById(R.id.rootCardView_addressItemPopUP_cd));
}
}
}
在片段中:
adapter.setListener(new TestAdapter.onChecked() {
@Override
public void chekedListener(AddressModel addressClass_serialized) {
//Call Dialog Here
}
});
推荐阅读
- html - 为什么我不能根据 CSS 中的文本调整图像大小?
- c# - 如何生成不连续重复 3 次的随机 int?
- r - 按组划分的因子水平
- activex - 是否有对 Webview2 控件的 ActiveX 支持
- android - Android Autofill 执行回调
- javascript - 为什么 setTimeout 函数是非阻塞的?
- javascript - 复制对象属性保持可变性
- java - 如何检查 JSON 数组的对象是否包含 Android Java 中具有特定名称的数字?
- django - POST 请求适用于 POSTMAN,但在我的 React 上失败
- javascript - 在Jquery输入函数中增加类名