首页 > 解决方案 > 从列表视图项中的按钮调用片段

问题描述

我有一个ListViewFragment在我的 ListView 的项目中,我有一个Button如何通过单击按钮调用另一个Fragment自定义并保留项目信息?DialogFragment

标签: androidfragmentandroid-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
        }
    });

推荐阅读