2017-02-06 41 views
1

好吧,我只是想處理第二次點擊CardView如何處理CardView上的第二次點擊

例如,現在,當我(或用戶)點擊該CardView,它將使CardViewTRANSPARENT並且還Focusable和其他一些東西,如添加Android文本成EditText

所以,我需要處理時,用戶或我自己點擊了CardView第二次CardView變化Color.WHITE並設置Focusablefalse或其他東西......

我如何能做到這一點?

這裏是我做了什麼至今:

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

爲什麼不使用簡單的全局布爾值? (這是最簡單的解決方案,如果你只需要在一次處理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