2016-02-08 39 views

回答

0

显示已经检查 -

你可以保持你的列表的大小的布尔数组。在绑定视图处理布尔(真/假)逻辑,如设置检查单选按钮的真/假。

处理新的点击 -

然后在单选按钮的onclick,每个数组元素的值设置为false,之后的当前阵列的位置设置为true。现在拨打notifyDatatSetChanged()

1

你可以使用这样的事情,它存储位置选择的项目,你可以添加更多的代码来存储项目本身,如果你的适配器进行重新排序本身

public class SingleChoiceAdapter extends RecyclerView.Adapter<SingleChoiceAdapter.ItemViewHolder> { 

    private static final int NO_POSITION = -1; 
    private static final String SELECTED_ITEM_POSITION = "SELECTED_ITEM_POSITION"; 

    private final LayoutInflater inflater; 
    private final List<Item> items; 

    private int selectedItemPosition = NO_POSITION; 

    public SingleChoiceAdapter(Context context, Bundle savedInstanceState) { 
     inflater = LayoutInflater.from(context); 
     items = new ArrayList<>(); 
     if (savedInstanceState != null) { 
      selectedItemPosition = savedInstanceState.getInt(SELECTED_ITEM_POSITION, NO_POSITION); 
     } 
    } 

    @Override 
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     final View view = inflater.inflate(R.layout.item, parent, false); 
     return new ItemViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ItemViewHolder holder, int position) { 
     final Item item = items.get(position); 
     holder.textView.setText(item.name); 
     holder.textView.setBackgroundColor(position == selectedItemPosition 
       ? Color.LTGRAY 
       : Color.TRANSPARENT); 
     holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       updateSelectedItem(holder.getAdapterPosition()); 
      } 
     }); 
    } 

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

    public void setItems(List<Item> items) { 
     this.items.clear(); 
     this.items.addAll(items); 
     notifyDataSetChanged(); 
    } 

    public Item getSelectedItem() { 
     if (selectedItemPosition == NO_POSITION) { 
      return null; 
     } 
     return items.get(selectedItemPosition); 
    } 

    public void onSaveInstanceState(Bundle outState) { 
     outState.putInt(SELECTED_ITEM_POSITION, selectedItemPosition); 
    } 

    private void updateSelectedItem(int newSelectedItemPosition) { 
     if (selectedItemPosition != NO_POSITION) { 
      notifyItemChanged(selectedItemPosition); 
     } 
     selectedItemPosition = newSelectedItemPosition; 
     notifyItemChanged(newSelectedItemPosition); 
    } 

    public static class ItemViewHolder extends RecyclerView.ViewHolder { 

     public final TextView textView; 

     public ItemViewHolder(View itemView) { 
      super(itemView); 
      textView = (TextView) itemView.findViewById(R.id.text_view); 
     } 
    } 
} 
2

商店已选中的项目在states一个SparseBooleanArray与位置key.As更改buttonstate,更新其状态在booleanArray并调用notifyItemChanged(position)。而在BindviewHolder(ViewHolder viewholder,int position)方法在thisbooleanArrayviewholder.radioButton.setChecked(boolean.get(position))。看看加载状态基本思想

0

你甚至可以用一个单一的整数变量来完成它,而不是维护一个数组,这个数组在昂贵的空间是一个约束条件的设备中比如android。

所以,只保留一个整数变量,可以说int selectedPosition = -1最初。 在onBind检查是否位置==选定位置,如果为true检查按钮,否则取消选中。 每当用户检查/取消选中按钮,只需更新selectedPosition

这样的事情,

if(selectedPosition==position) 
    selectedPosition=-1 
else{ 
    selectedPosition=position 
    notifyItemChanged(selectedPosition); 
} 
notifyItemChanged(position); 
0

请设置id为位置onBindViewHolder,那么你可以处理这个方法也行动。更新数据集,并呼吁notifyDataSetChanged

The result as below

这里是我的示例代码

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    ItemObject itemObject = mDataset.get(position); 
    ((ViewHolder)holder).mTextView.setText(itemObject.getTitle()); 
    Button mButton = ((ViewHolder) holder).mButton; 


    mButton.setSelected(itemObject.isSelected()); 
    if(itemObject.isSelected()){ 

     ((ViewHolder)holder).mTextView.setText("OK"); 
    } 
    mButton.setTag(position); 
    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      updateDatset((Integer) v.getTag()); 
     } 
    }); 
} 

在updateDataset方法,我更新此数据集的信息,并致电notifyDataSetChanged()

好运