因此,当我单击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();
}
}
当我单击该项目时,它会显示错误提示之类的内容。
您可以使用界面
创建类接口:
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
}
}