2017-03-06 74 views
0

我的MainActivity中有一个RecyclerView,其中adapter classRecyclerView的每个列表单元格包含Checkbox。为Checkbox设置一个预选值。如果这是真的,则将Checkbox设置为选中状态。还有一件事是一些项目是完全允许单选(即,如果我选择这些项目'Checkbox,其他选中的框将被取消选中)。该值由每个项目字典中的另一个参数确定。我的活动中还有一个按钮,当没有选择任何按钮时,按钮将被禁用,反之亦然。我如何实现这些功能?我的课程如下。带有复选框问题的Android回收站视图

public class FurtherExtrasAdapter extends RecyclerView.Adapter<FurtherExtrasAdapter.ViewHolder> { 


ArrayList<Item> items; 
Context context; 
int flag = 0; 
private CouponCodeActivity mThis; 

public FurtherExtrasAdapter(ArrayList<Item> items, CouponCodeActivity mThis, Context context) { 
    this.items = items; 
    this.mThis = mThis; 
    this.context = context; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell_platform_item, parent, false); 
    return new ViewHolder(view); 
} 

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

    ; 
    holder.enrolment.setText(items.get(position).getName()); 
    holder.selectEnrollment.setChecked(items.get(position).isPreselect()); 

} 

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


@Override 
public long getItemId(int position) { 
    return super.getItemId(position); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    TextView enrolment; 
    CheckBox selectEnrollment; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     enrolment = (TextView) itemView.findViewById(R.id.tv_entrollment); 
     selectEnrollment = (CheckBox) itemView.findViewById(R.id.cb_select_entrollment); 


    } 
}} 

而我的视图类包含以下代码。

rv_further=(RecyclerView)findViewById(R.id.rv_further); 
    rv_further.setLayoutManager(manager); 
      rv_further.setVisibility(View.VISIBLE); 
      rv_further.setHasFixedSize(true); 
      rv_further.setItemAnimator(new DefaultItemAnimator()); 
      rv_further.setAdapter(adapter); 

public void updateButtonState(double num) { 

    checkedBoxs += num; 

     if (checkedBoxs > 0) { 
      Log.d("---CHECKED",String.valueOf(checkedBoxs)); 
      btnApply.setEnabled(true); 
     } else { 
      Log.d("---UNCHECKED",String.valueOf(checkedBoxs)); 
      btnApply.setEnabled(false); 
     } 
} 

回答

0

使用check clicklistener像......在此基础上

holder.selectEnrollment .setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      items.get(position).setPreselect(!items.get(position).isPreselect); 
     } 
    }); 
+0

但是如何控制排他性? –

+0

是什么。你确切想要......? –

+0

1.活动中的按钮应根据用户点击复选框进行更新。如果没有选择,按钮应该禁用。 2.对于回收商视图中的一些项目,一个排他性布尔变量是der。如果它是真的,那么我们可以检查/选择只有该检查按钮。其他人应该自动取消选择。 –

0

那么我们就可以查看/只选择checkbutton。其他人应该自动取消选择。

你可以把一个变量在适配器中,说

int position_last_selected = -1; 

然后,当您添加,检查此值为-1与否。如果没有,获得该项目的位置,

list.get(position_last_selected).setIsPreSelect(false); 
// then update your current position item 
list.get(position).setIsPreSelect(true); 
// update the last selected value 
position_last_selected = position; 
//Update the adapter 
notifiyDataSetChanged(); 

试一下吧!