2017-03-06 103 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(); 

試一下吧!