2017-02-06 8 views
1

これは、2番目のクリックを処理しようとしています。CardViewです。 I(またはユーザー)がCardViewをクリックしたときCardViewの2回目のクリックを処理する方法

例えば、今、それはCardViewTRANSPARENTも、Focusableおよびいくつかの他のstuffs EditTextAndroidテキストを追加するようになります。ユーザーまたは私は自分自身が二度目ためCardViewをクリックしたとき

だから、私は私がそれを行うことができますどのように、CardViewColor.WHITEに変わり、falseまたは他のstuffsに設定Focusable ...

処理する必要があります?ここで

は私がこれまでにやったことです:

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に(をクリックしてください最初の時間に)タグを設定することでした最初のクリックするものなど...

しかし、事実は、私は実際にそのことを手がかりにしていません2度目のクリックをクリックします。

+0

なぜ単純なグローバルブール値を使用しないのですか? (それは一度に1枚しかカードを扱わなければならない場合は最も簡単な解決策です) – 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

関連する問題