Моя проблема в том, что у меня есть вид рециркулятора, который открывает диалоговое окно при нажатии на них, но при быстром нажатии на два разных элемента открывается два диалоговых окна.
Как я могу решить эту проблему?
Я пробовал
, используя bool перед действием click:
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if(!clicked[0]){
clicked[0] = true;
if (mListener != null) {
mListener.onClickBoard(mValues.get(i));
}else{
((MainActivity)mContext).onClickBoard(mValues.get(i).getAreaId(), mValues.get(i).getName());
}
}
}
})
, но это просто решилослучай, когда я дважды касаюсь одного и того же предмета, но не когда быстро нажимаю на разные.
надеюсь, вы мне поможете, что мне делать.
РЕДАКТИРОВАТЬ
Я бы предпочел решить эту проблему с помощью адаптера, потому что я буду использовать решение для других представлений переработчика, а другие не будут вызывать диалоговое окно.
Мой класс адаптера:
public class MyBoardAdapter extends RecyclerView.Adapter<MyBoardAdapter.ViewHolder> {
private List<Board> mValues;
private Context mContext;
private final OnBoardFragmentInteractionListener mListener;
public MyBoardAdapter(List<Board> mValues, OnBoardFragmentInteractionListener mListener, Context context) {
this.mValues = mValues;
this.mContext = context;
this.mListener = mListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_board, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int i) {
holder.mItem = mValues.get(i);
holder.tvName.setText(holder.mItem.getName());
holder.tvWaiter.setVisibility(View.GONE);
holder.tvCount.setVisibility(View.GONE);
final boolean[] clicked = {false};
GestureDetector gestureDetector;
byte[] decodedString = Base64.decode(holder.mItem.getSrc(), Base64.DEFAULT);
try {
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
holder.ivTable.setImageBitmap(decodedByte);
} catch (Exception e) {
e.printStackTrace();
}
Map<String, String> map = isEmpty(holder.mItem.getAreaId(), holder.mItem.getName());
if (!map.isEmpty()) {
holder.ivTable.setImageResource(R.mipmap.ic_launcher_atento_round);
holder.tvWaiter.setText(map.get("name"));
holder.tvWaiter.setVisibility(View.VISIBLE);
holder.tvCount.setText("(" + map.get("count") + ")");
holder.tvCount.setVisibility(View.VISIBLE);
}
gestureDetector = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener(){
});
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if(!clicked[0]){
clicked[0] = true;
if (mListener != null) {
mListener.onClickBoard(mValues.get(i));
}else{
((MainActivity)mContext).onClickBoard(mValues.get(i).getAreaId(), mValues.get(i).getName());
}
}
}
});
}
@Override
public int getItemCount() {
return mValues.size();
}
public void setmValues(List<Board> mValues) {
this.mValues = mValues;
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
@BindView(R.id.ivBoard)
ImageView ivTable;
@BindView(R.id.tvName)
TextView tvName;
@BindView(R.id.tvWaiter)
TextView tvWaiter;
@BindView(R.id.tvCount)
TextView tvCount;
public Board mItem;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
this.mView = itemView;
}
@Override
public String toString() {
return "ViewHolder{" +
"mView=" + mView +
", ivTable=" + ivTable +
", tvName=" + tvName +
", tvWaiter=" + tvWaiter +
", tvCount=" + tvCount +
", mItem=" + mItem +
'}';
}
}
public Map<String, String> isEmpty(String area, String mesa) {
Map<String, String> response = new HashMap<>();
if (!mOcu.get(0).isEmpty()) {
for (int i = 0; i <= mOcu.get(0).size() - 1; i++) {
if (mOcu.get(0).get(i).trim().equals(area.trim()) && mesa.equals(mOcu.get(1).get(i))) {
Log.i("Mesa Ocupada", mOcu.get(0).get(i) + " -- " + mOcu.get(1).get(i));
response.put("code", mOcu.get(2).get(i));
response.put("name", mOcu.get(3).get(i));
response.put("count", mOcu.get(5).get(i));
return response;
}
}
}
return response;
}
}
Диалоговый код:
public void dialogCustomer() {
View mView = getLayoutInflater().inflate(R.layout.dialog_customer, null);
final AlertDialog dialog = new AlertDialog.Builder(this).setView(mView).create();
final TextView tvCustomer = (TextView) mView.findViewById(R.id.tvCustomer);
final EditText etCustomer = (EditText) mView.findViewById(R.id.etCustomer);
final Button btnSubmit = (Button) mView.findViewById(R.id.btnSubmit);
tvCustomer.setText("Atento Cliente");
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startHomeActivity(etCustomer.getText().toString());
dialog.dismiss();
}
});
etCustomer.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
startHomeActivity(etCustomer.getText().toString());
dialog.dismiss();
return true;
}
return false;
}
});
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
orderFragment = (OrderFragment) getSupportFragmentManager().findFragmentByTag("orderFragment");
if (orderFragment == null) {
new AccessBoardAsyncTask(mContext).execute("L", mBoard);
}
}
});
dialog.show();
}