如何获得对适配器的片段对话框按钮响应?

How to get FragmentDialog button response to adapter?

我需要从 FragmentDialog 获得按下按钮的响应到 adapter.So 基本上我已经为 viewholder 中的按钮设置了点击侦听器,现在当我按下该按钮时,对话框打开并且我需要获得我从该对话框中设置的两个按钮的响应。

我的片段对话框:

public class FragmentDialog extends AppCompatDialogFragment{
private EditText edtTextAmount;
private TextView txtEnterAmount;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
    LayoutInflater inflater=getActivity().getLayoutInflater();
    View view=inflater.inflate(R.layout.fragment_add_amount,null);

    builder.setView(view)
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            }).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });
    edtTextAmount=view.findViewById(R.id.edtTtxt_enterAmount);
    return builder.create();
}
}

我的适配器:

public class WatchlistAdaptor extends RecyclerView.Adapter<WatchlistAdaptor.WatchlistViewHolder>  {
//DescriptionFragment descriptionFragment;
private LayoutInflater inflater;
private ArrayList<WatchlistItems> watchlistItems;
private Context context;
private OnItemClickListener mListener;

public interface OnItemClickListener {
    void onDeleteClickRV(int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;
}

class WatchlistViewHolder extends RecyclerView.ViewHolder {
    private ImageView cryptoImg;
    private TextView cryptoAcronym;
    private TextView cryptoName;
    private Button btnAddToActCurrencies;

    WatchlistViewHolder(View itemView/*, WatchlistAdaptor adaptor*/, final OnItemClickListener listener) {

        super(itemView);
        this.cryptoImg = itemView.findViewById(R.id.img_wallet_WatchlistRV_cryptoImage);
        this.cryptoAcronym = itemView.findViewById(R.id.txt_wallet_WatchlistRV_cryptoAcronym);
        this.cryptoName = itemView.findViewById(R.id.txt_wallet_WatchlistRV_cryptoName);
        this.btnAddToActCurrencies = itemView.findViewById(R.id.btn_wallet_WatchlistRV_AddToActCurrencies);
        // this.animAlpha = AnimationUtils.loadAnimation(context,R.anim.anim_alpha);
        btnAddToActCurrencies.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                FragmentActivity activity = (FragmentActivity) (context);
                FragmentManager fragmentManager = activity.getSupportFragmentManager();
                FragmentDialog fragmentDialog = new FragmentDialog();
                fragmentDialog.show(fragmentManager, "fragmentalert");
                }

            }
        });

    }
}

... }

  1. 评论:https://developer.android.com/training/basics/fragments/communicating
  2. 向您的片段添加一个侦听器,该侦听器会在单击按钮时调用。

示例:

public class FragmentDialog extends AppCompatDialogFragment{
private EditText edtTextAmount;
private TextView txtEnterAmount;

// Add listener class and instance
private OnButtonClickListener mListener;
interface OnButtonClickListener() {
    void onButtonClick();
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
    LayoutInflater inflater=getActivity().getLayoutInflater();
    View view=inflater.inflate(R.layout.fragment_add_amount,null);

    builder.setView(view)
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            }).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            // Invoke listener on UI click
            if (mListener != null) {
                mListener.onButtonClick();
            }
        }
    });
    edtTextAmount=view.findViewById(R.id.edtTtxt_enterAmount);
    return builder.create();
    }

    @Override
    public void onAttach(Context context) {
        // Save context the fragment is attached to as the listener
        if (context instanceof OnButtonClickListener) {
            mListener = (OnButtonClickListener) context;
        }
    }
}
  1. 更新您的 activity 以实现接口并委托操作

示例:

public void MyActivity extends AppCompatActivity implements FragmentDialog.OnButtonClickListener {

    @Override
    public void onButtonClick() {
        // Since the activity implements the interface, it will be
        // called when the fragment button is clicked -
        // tell your adapter or whatever what to do
        mAdapter.handleButtonClick();
    }

}

希望对您有所帮助!