2017-02-06 7 views
1

Хорошо, я просто пытаюсь обработать второй щелчок на CardView.Как обращаться со вторым кликом на CardView

Например, сейчас, когда я (или пользователь) нажимает на CardView, он сделает CardView, TRANSPARENT, а также, Focusable и некоторые другие материалы, такие как добавление Android текст в EditText.

Итак, мне нужно обрабатывать, когда пользователь или я сам нажал на CardViewво второй раз, CardView изменения в Color.WHITE и установить Focusable в false или других материалов ...

Как я могу это сделать ?

Вот что я сделал до сих пор:

final CardView cvAnd = (CardView) findViewById(R.id.and_cv); 
     cvAnd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       cvAnd.setTag("FirstClick"); 
       if (cvAnd.getTag().equals("FirstClick") && TextUtils.isEmpty(mTagField.getText().toString())) { 
        mTagField.setText(R.string.android); 
       } else { 
        mTagField.setText(mTagField.getText() + "Android"); 
       } 
       cvAnd.setCardBackgroundColor(Color.TRANSPARENT); 
       cvAnd.setFocusable(true); 

       //First click 

       cvAnd.setTag("SecondClick"); 
       if (cvAnd.getTag().equals("SecondClick")) { 
        cvAnd.setCardBackgroundColor(Color.WHITE); 
        cvAnd.setFocusable(false); 

       } 

       //Second click maybe? 
      } 
     }); 

Идея состояла в том, чтобы установить метку (в первый раз нажмите), чтобы FirstClick затем обработать его, если тег был FirstClick делать первый щелчок и так далее ...

Но, дело в том, что я действительно не знаю, как обращаться с этим второй раз нажмите.

+0

Почему бы не использовать простой глобальный логический? (это самое простое решение, если вам нужно обрабатывать только одну карту за раз) – MatPag

+0

Ну, допустим, есть несколько карт, которые пользователь хочет выбрать именно так. Это может быть от 1 до 10 или т. д. Всегда. Можете ли вы сделать свой идея как ответ? Потому что, что бы я ни думал, это не соответствует моему ожиданию, вы знаете ... Это было бы здорово – Mohsen

+0

Больше карт = Адаптер. Если вы используете RecyclerView, вы можете сохранить логическое значение в ViewHolder и использовать его для обработки логики. Затем, когда ViewHolder используется повторно, вы можете сбросить состояние до значения по умолчанию. – MatPag

ответ

2

Здесь представлено доказательство концепции, как вы просили. Дайте мне знать, если вы что-то не понимаете.

public class CardViewAdapter extends extends RecyclerView.Adapter<CardViewAdapter.MyViewHolder> { 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public boolean isFirstSelected; 
     public CardView cardView; 

     public MyViewHolder(View view) { 
      super(view); 
      cardView = (CardView) view.findViewById(R.id.card); 
     } 

     public void reset(){ 
      //put here all the properties which need to be resetted 
      isFirstSelected = false; 
     } 
    } 


    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.card_row, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 
     //set card click listener here and use 
     //holder.isFirstSelected to handle the internal logic 
    } 

    @Override 
    public void onViewRecycled(MyViewHolder holder) { 
     //reset the viewholder state 
     holder.reset(); 
    } 

} 

Я взял ваш фрагмент и попытался перевести эту логику в это. Возможно, вам нужно изменить логику, но теперь у вас есть исходная точка.

final CardView cvAnd = (CardView) findViewById(R.id.and_cv); 
    cvAnd.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      if (!isClicked) { 
       if (TextUtils.isEmpty(mTagField.getText().toString())) { 
        mTagField.setText(R.string.android); 
        cvAnd.setCardBackgroundColor(Color.TRANSPARENT); 
        cvAnd.setFocusable(true); 
       } 

      } else { 
       if (mTagField.getText().toString().contains("Android")) { 
        mTagField.getText().clear(); 
       } else { 
        mTagField.setText(mTagField.getText() + ", Android"); 
       } 
       cvAnd.setCardBackgroundColor(Color.WHITE); 
       cvAnd.setFocusable(false); 
      } 
      //reverse boolean 
      isClicked = !isClicked; 
     } 
    }); 
+0

я обновил свой ответ – MatPag

+1

Удивительный! Спасибо большое :) Какой сладкий подход :) – Mohsen

+1

Рад быть полезен :) Удачи. – MatPag