2012-11-04 2 views
3

Android 애플리케이션을 개발하는 것은 이번이 처음입니다.이 질문은 생각할 필요가 없을 수도 있습니다. 선택한 체크 박스의 수를 제한하고 싶습니다. 즉, 사용자는 최대 2 개의 체크 박스 만 선택할 수 있습니다. onCheckedChanged()에서 어떻게합니까?ListView에서 체크 박스 수를 제한하는 방법

package com.mainak.walkbuddy; 

import java.util.List; 

import android.app.Activity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.TextView; 

public class InteractiveArrayAdapter extends ArrayAdapter<Model> 
{ 
    private final List<Model> list; 
    private final Activity context; 

    public InteractiveArrayAdapter(Activity context, List<Model> list) 
    { 
     super(context, R.layout.activity_show_content, list); 
     this.context = context; 
     this.list = list; 
    } 

    static class ViewHolder 
    { 
     protected TextView text; 
     protected CheckBox checkbox; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View view = null; 
     int checkBoxCounter = 0;  
     int checkBoxInitialized = 0; 
     if (convertView == null) 
     { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.activity_show_content, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) view.findViewById(R.id.label); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
      viewHolder.checkbox.setOnCheckedChangeListener(
        new CompoundButton.OnCheckedChangeListener() 
        { 
         @Override 
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
         { 
          Model element = (Model) viewHolder.checkbox.getTag(); 
          element.setSelected(buttonView.isChecked()); 
         } 
        } 
        ); 
      view.setTag(viewHolder); 
      viewHolder.checkbox.setTag(list.get(position)); 
     } 
     else 
     { 
      view = convertView; 
      ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.text.setText(list.get(position).getName()); 
     holder.checkbox.setChecked(list.get(position).isSelected()); 
     return view; 
    } 
} 

답변

1

선택한 항목의 수를 나타내는 int 카운터를 추가, 때마다 아이템은 카운터가 2

보다 큰 경우 그 다음보다 더 큰이 할 수없는 경우 확인할 확인되고있다 아무것도하지 마라 (플래그를 체크하지 않는다) 그렇지 않으면 플래그를 변경하고 카운터를 증가시킨다.

보기에 onClickListener를 설정해야하며 checked 플래그를 checked/unchecked로 변경 한 다음 notifydatasetchanged()를 호출하여 선택 상태를 변경하십시오.

onCheckedChangedListener를 추가 할 때 체크 상태를 유지하는 데 문제가있을 수 있습니다.

+0

int를 어디에 두어야하는지 이해할 수 없습니다. – user1742188

+0

을 비동기 작업의 전역 변수로 넣습니다. 생성자 내부에서 초기화하면됩니다. – meh

관련 문제