2016-04-02 30 views
1

Uzun Öğe üzerinde Şu andaBen recyclerview

tıkladığında bir RecyclerView içinde seçme Radyo düğmesi ile sorun yaşıyorum öğe üzerinde herhangi bir yerde ben uzun tıklama kullanıyorum eğer zaman Radyo düğmesini seçebilirsiniz nasıl, ben RecyclerView'ı kurdu, varsayılan bir LayoutManager'a sahipti ve tüm verileri görüntüleyen bir adaptöre sahipti. Son zamanlarda çalışma OnClickListener() var (o onCreateViewHolder (gitmeli eğer emin değilim rağmen) ya onBindViewHolder * (ettik -.) OnBindViewHolder() çağrıldığında emin

Benim SingelRow XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="80dp" 

> 


<ImageView 
    android:id="@+id/item_icon" 
    android:layout_width="64dp" 
    android:layout_height="64dp" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginTop="1dp" 
    android:layout_marginBottom="1dp" 
    android:contentDescription="icon" 
    android:src="@drawable/ic_launcher" 
    /> 


<TextView 
    android:id="@+id/item_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/item_icon" 
    android:layout_alignBaseline="@+id/item_icon" 
    android:textColor="@android:color/darker_gray" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginTop="8dp" 
    android:textSize="22dp" /> 

<RadioButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/radioButton" 
    android:layout_centerVertical="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" /> 

tek seçim modu ve ViewHolder Benim Adaptör

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
private static RadioButton lastChecked = null; 
private static int lastCheckedPos = 0; 
Context context; 
private ArrayList<ItemData> itemsDatas; 


public MyAdapter(ArrayList<ItemData> itemsDatas) { 
    this.itemsDatas = itemsDatas; 
} 


@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 

    View itemLayoutView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_layout, null); 


    ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
    return viewHolder; 
} 


@Override 
public void onBindViewHolder(ViewHolder viewHolder, final int position) { 


    if (position == 0 && itemsDatas.get(0).isSelected() && viewHolder.radioButton.isChecked()) { 
     viewHolder.radioButton.setActivated(true); 
     viewHolder.radioButton.setSelected(true); 
     lastChecked = viewHolder.radioButton; 
     lastCheckedPos = 0; 
    } 

    viewHolder.txtViewTitle.setText(itemsDatas.get(position).getTitle1()); 

    viewHolder.imgViewIcon.setImageResource(itemsDatas.get(position).getImageUrl()); 

    viewHolder.radioButton.setTag(this); 
    viewHolder.radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RadioButton cb = (RadioButton) v; 


      if (cb.isChecked()) { 
       if (lastChecked != null) { 
        lastChecked.setChecked(false); 
        itemsDatas.get(lastCheckedPos).setIsSelected(false); 
       } 

       lastChecked = cb; 
       lastCheckedPos = position; 
      } else 
       lastChecked = null; 

      itemsDatas.get(position).setIsSelected(cb.isChecked()); 
     } 
    }); 


} 


@Override 
public int getItemCount() { 
    return itemsDatas.size(); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { 

    public TextView txtViewTitle; 
    public ImageView imgViewIcon; 
    public RadioButton radioButton; 


    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     itemLayoutView.setOnClickListener(this); 
     itemLayoutView.setOnLongClickListener(this); 
     txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title); 
     imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon); 
     radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton); 
    } 

    @Override 
    public void onClick(View v) { 
     Log.d("TAG", "onClick " + getPosition() + " " + txtViewTitle.getText().toString()); 
    } 

    @Override 
    public boolean onLongClick(View v) { 
     Log.d("TAG", "onLongClick " + getPosition() + " " + txtViewTitle.getText().toString()); 
     return true; 
    } 
}} 

o Eserim ama ne istediğim zaman uzun olduğunu ben radyo düğmesini tıklayın

Bir diğer işler

Ben çözümleri bir sürü denedim Ama

başarılı olamadı

için hiçbir faydası istiyorum bu Item Radyo düğmesini seçmek istediğiniz Madde üzerinde Anywhere tıklayın Ve öğede herhangi bir yere tıkladığınızda

Herhangi bir yardım için minnettarım. Teşekkür ederim. Sana bu durumda, bir onLongClickListener ayarlamak gereken yere soruyorsun değil hata varsa

+0

Radyo düğmesi için uzun tıklama dinleyicisini nerede ayarlayacağınızı anlamıyorum –

+0

[RecyclerView onClick] 'in olası kopyası (http://stackoverflow.com/questions/24471109/recyclerview-onclick) –

+0

@ cricket_007 bunu herkese açık olarak görebilirsiniz Statik sınıf V iewHolder – MAJHOOOOOL

cevap

0

Bu ViewHolder gözden geçirilmiş versiyonu

class ViewHolder extends RecyclerView.ViewHolder { 

public TextView txtViewTitle; 
public ImageView imgViewIcon; 
public RadioButton radioButton; 


public ViewHolder(View itemLayoutView) { 
    super(itemLayoutView); 

    . 
    txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title); 
    imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon); 
    radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton); 
    itemLayoutView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     //what ever you want 
     } 
    }); 
    itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      if(!radioButton.isSelected()){ 
       radioButton.setSelected(true); 
      }else{ 
       radioButton.setSelected(false); 
      } 
      return false; 
     } 
    }); 
} 
+0

Teşekkür ederim ama başarılı değil – MAJHOOOOOL

0

böyle onCreateViewHolder yöntemi değiştirin:

@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 

    View itemLayoutView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_layout, null); 

    itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      //do something 
      return true; 
     } 
    }); 
    ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
    return viewHolder; 
} 
+0

Benim sorunum nasıl Ben uzun tıklandığında RadioButton seçin Öğe – MAJHOOOOOL