2016-01-01 36 views
0

我有自定義選擇一個CardView,其中包括爲trueCardView click事件和重點在同一時間

<android.support.v7.widget.CardView 
    android:id="@+id/cvColor" 
    android:layout_width="45dp" 
    android:layout_height="45dp" 
    android:layout_gravity="center" 
    android:layout_marginBottom="4dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginTop="2dp" 
    android:foreground="@drawable/card_color_size" 
    android:minHeight="50dp" 
    android:visibility="gone" 
    app:cardCornerRadius="3dp" 
    app:cardElevation="4dp" 
    app:cardPreventCornerOverlap="false" 
    app:cardUseCompatPadding="true" > 

焦點狀態我需要的是,當我卡上單擊它應該被點擊,以及專注了。所以我做了這樣的事情。

@Override 
    public void onBindViewHolder(final ViewHolderCard1 viewHolder, 
      final int position) { 
     viewHolder.size.setVisibility(View.VISIBLE); 
     viewHolder.tvSize.setText(size.get(position).get("size")); 
     viewHolder.size.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       posSize = position; 
       Toast.makeText(getApplicationContext(), "" + posSize, 
         Toast.LENGTH_SHORT).show(); 
       viewHolder.size.setFocusableInTouchMode(true); 
      } 
     }); 
    } 

現在當我點擊的RecycleView的項目,一旦它工作得很好,既Toast和重點發生了同一時間。

但是,只要我點擊下一個項目,它就像第一次點擊卡執行點擊事件,第二個它獲得焦點。

任何人都知道我該怎麼辦?

+2

'但是,只要我點擊下一個項目,就像第一個點擊卡片執行點擊事件,然後第二個焦點' - 這是什麼意思? –

+0

這意味着當我點擊卡時它只會得到焦點不會執行點擊,但是當我再次點擊同一張卡時,現在它執行點擊事件。總之卡片不會在第一次點擊時執行點擊事件 –

回答

0

我解決了這幾天回我做了張貼在這裏我的答案,如果任何人糞便這個問題。

SparseBooleanArray在我的情況下做了詭計。

首先在你的適配器類中聲明SparseBooleanArray。並在適配器類的構造函數中初始化它。

private ArrayList<HashMap<String, String>> size; 
public final SparseBooleanArray selectedItems; 

public Size(ArrayList<HashMap<String, String>> title) { 
    this.size = title; 
    selectedItems = new SparseBooleanArray(size.size()); 
} 

現在我用setSelected來聚焦所選卡片。內部onBindViewHolder(或getView,如果您使用的是BaseAdapter)。

viewHolder.size.setSelected(selectedItems.get(position)); 
viewHolder.size.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     posSize = position; 

     if (selectedItems.size() == 0) { 
      selectedItems.put(position, true); 
     } else if (selectedItems.size() > 0) { 
      selectedItems.clear(); 
      selectedItems.put(position, true); 
     } 
     notifyDataSetChanged(); 
    } 
}); 

快樂編碼。

0
Try this code. 
@Override 
public void onBindViewHolder(final ViewHolderCard1 viewHolder, 
     int position) { 
    viewHolder.size.setVisibility(View.VISIBLE); 
    viewHolder.tvSize.setText(size.get(position).get("size")); 
    viewHolder.size.setOnClickListener(new Listener(position, viewHolder.size)); 
} 
class Listener implements OnClickListener { 
    private int position; 
    private ImageView imageView; 
    private CardView cardview; 

    Listener(int position, CardView cardview) { 
     this.position = position; 
     this.imageView = imageView; 
     this.data = data; 
    } 

    @SuppressLint("UseValueOf") 
    @Override 
    public void onClick(View v) { 

    posSize = position; 
      Toast.makeText(getApplicationContext(), "" + posSize, 
        Toast.LENGTH_SHORT).show(); 
      CardView.setFocusableInTouchMode(true); 

    } 
} 
+0

不能正常工作.... –