在Recyclerview项目单击上显示多个对话框

问题描述 投票:-1回答:1

因此,当我单击recyclerview上的项目时,我想显示一个自定义对话框,但是单击该视图中的视图时,自定义对话框也将显示timepickerdialog。我的自定义对话框之前可以正常运行,但是当我将其应用于recyclerview时,它不起作用。

这是我的适配器:

    public class KegiatanAdapter extends RecyclerView.Adapter<KegiatanAdapter.ViewHolder> {
    Context context;
    MaterialDialog materialDialog;
    List<Kegiatan> kegiatanList = new ArrayList<>();
    private Api mApi;

    public KegiatanAdapter(Context context) {
        this.context = context;
    }

    public KegiatanAdapter(Context context, List<Kegiatan> kegiatanList) {
        this.context = context;
        this.kegiatanList = kegiatanList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_kegiatan, parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.tvTitle.setText(kegiatanList.get(position).getKegetian());

        holder.layoutKegiatan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                materialDialog = new MaterialDialog.Builder(context)
                        .customView(R.layout.activity_dialog_box_bermain_bebas, true)
                        .positiveText(R.string.simpan)
                        .negativeText(R.string.batal)
                        .build();
                TextInputEditText etKeterangan = materialDialog.getCustomView().findViewById(R.id.tietKeterangan_bermain);
                TextInputEditText etWaktu = materialDialog.getCustomView().findViewById(R.id.tietWaktu_bermain);
                SetTime fromTime = new SetTime(etWaktu, context);

                materialDialog.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view1) {
                        MaterialDialog dialog = DialogBuilder.showLoadingDialog(context, "Saving Data", "Please Wait", false);
                        mApi.addReport(KegiatanSiangActivity.idMurid,
                                PrefUtil.getGuru(context, PrefUtil.USER_SESSION).getIdGuru(),
                                kegiatanList.get(position).getId_kegiatan(),
                                etKeterangan.getText().toString(),
                                fromTime.getTimeResult())
                                .enqueue(new Callback<BaseRespons>() {
                                    @Override
                                    public void onResponse(Call<BaseRespons> call, Response<BaseRespons> response) {
                                        BaseRespons baseRespons = response.body();
                                        String msg = "";
                                        if (baseRespons != null) {
                                            if (!baseRespons.getError()) {
                                                msg = "Data berhasil disimpan.";
                                            }
                                        }
                                        if (response.code() == 400) {
                                            msg = "Invalid parameter!";
                                        }
                                        if (response.code() == 502) {
                                            msg = "Gagal menyimpan ke database.";
                                        }
                                        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
                                        dialog.dismiss();
                                    }

                                    @Override
                                    public void onFailure(Call<BaseRespons> call, Throwable t) {

                                    }
                                });
                        materialDialog.dismiss();
                    }
                });
                materialDialog.show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return kegiatanList.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        @BindView(R.id.tvKeterangan_itemKegiatan)
        TextView tvKetrangan;
        @BindView(R.id.tvTitle_itemKegiatan)
        TextView tvTitle;
        @BindView(R.id.tvWaktu_itemKegiatan)
        TextView tvWaktu;
        @BindView(R.id.layout_itemKegiatan)
        RelativeLayout layoutKegiatan;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }

    public void generate(List<Kegiatan> list){
        clear();
        this.kegiatanList = list;
        notifyDataSetChanged();
    }

    public void clear(){
        kegiatanList.clear();
        notifyDataSetChanged();
    }
}

当我单击该项目时,它会显示错误提示之类的内容。

android android-recyclerview onitemclicklistener customdialog material-dialog
1个回答
0
投票

您可以使用界面

创建类接口:

public interface AdapterCallback {
    void onMethodCallback();
}

构造函数适配器:

   public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private AdapterCallback mAdapterCallback;

    public MyAdapter(AdapterCallback callback) {
        this.mAdapterCallback = callback;
    }

    @Override
    public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) {
        // simple example, call interface here
        // not complete
        viewHolder.itemView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mAdapterCallback.onMethodCallback();
            }
        });
    }
}

活动:

public class MainActivity extends AppCompatActivity implements AdapterCallback {

    private MyAdapter mMyAdapter;

    @Override
    public void onMethodCallback() {
       // show dialog
    }

       @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

        this.mMyAdapter = new MyAdapter(this); // this class implements callback
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.