2013-09-07 3 views
1

행 세트가있는 목록보기를 수행했습니다. 각 행에는 확인란이 있습니다. 하나의 확인란을 클릭하면 다른 확인란도 선택됩니다. 이것을 피하기 위해 내가 무엇을 할 것인가? 누구나 나를 도울 줄 알고 ..Android 체크 박스 다중 선택 문제

답변

0

이것은 (view == null) 조건을 제거하여 뷰를 재사용하기 때문입니다.

+0

해당 작업 .. 그러나 내가 목록보기를 스크롤하는 경우 확인란의 선택이 자동으로 해제됩니다 atically – sundaramoorthy

2

ListView의 CheckBox에 문제가 발생하지 않도록하려면 처음에 부울 배열을 false로 초기화 한 다음 ListView에서 확인란이 선택된 배열에서 해당 위치를 true로 만듭니다. 이렇게하면 응용 프로그램에서 앞뒤로 이동하거나 ListView를 스크롤 할 때 확인란의 상태를 확인하는 데 문제가 발생하지 않습니다.

holder.checkbox.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 
         if (((CheckBox) v).isChecked()) 
          checkBoxState[pos] = true; 
         else 
          checkBoxState[pos] = false; 

        } 
       }); 

다음이 체크 박스는 스크롤 할 때 확인 계속되고 상태가 자동으로 변경되지 않습니다 :

holder.checkbox.setChecked(checkBoxState[pos]); 
+0

내 코드에서 이것을 적용하는 법을 모르겠다. – sundaramoorthy

+0

getView() 메서드에서 사용한다. 홀더의 사용법을 모른다면 사용자 지정 ListView를 철저히 조사 해보자. –

+0

공용 뷰 getView (int 위치, 뷰 convertView, 뷰 그룹 부모) { 보기 vi = convertView; \t vi = inflater.inflate (R.layout.mainlist_item, null); ImageView imgview = (ImageView) vi.findViewById (R.id.list_image); TextView 아티스트 = (TextView) vi.findViewById (R.id.nameid); TextView 뷰 = (TextView) vi.findViewById (R.id.deptid); imgview.setImageBitmap (imgs.get (position)); artist.setText (empname.get (position)); view.setText (empdept.get (position)); 돌아 가기 vi; } – sundaramoorthy

1

이가 여기

는 checkboxstate는 부울 배열입니다 설정하는 방법입니다 내 코드 :

public class Favourites extends Activity { 
     ListView list; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.listfavourites); 
      initcomponents(); 

      list.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
         long arg3) { 
       } 
      }); 
      ArrayList<HashMap<String, String>> alist = new ArrayList<HashMap<String, String>>(); 

      for (int i = 1; i < 20; i++) { 
       HashMap<String, String> hmap = new HashMap<String, String>(); 
       hmap.put("itemname", "ItemName" + i); 
       hmap.put("price", "Price"); 
       alist.add(hmap); 

      } 

      final CustomListAdapter adapter = new CustomListAdapter(this, 
        R.layout.listitemfavourites, alist); 

      list.setAdapter(adapter); 

     } 

     private void initcomponents() { 
      list = (ListView) findViewById(R.id.listfavourites_lst_list); 

     } 

     class CustomListAdapter extends ArrayAdapter<HashMap<String, String>> { 
      Context context; 
      boolean[] checkBoxState; 
      int textViewResourceId; 
      ArrayList<HashMap<String, String>> alist; 

      public CustomListAdapter(Context context, int textViewResourceId, 
        ArrayList<HashMap<String, String>> alist) { 
       super(context, textViewResourceId); 
       this.context = context; 
       this.alist = alist; 
       this.textViewResourceId = textViewResourceId; 
       checkBoxState = new boolean[alist.size()]; 

      } 

      public int getCount() { 

       return alist.size(); 
      } 

      public View getView(final int pos, View convertView, ViewGroup parent) { 
       Holder holder = null; 

       LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
       convertView = inflater.inflate(R.layout.listitemfavourites, parent, 
         false); 
       holder = new Holder(); 
       holder.checkbox = (CheckBox) convertView 
         .findViewById(R.id.listitemfavourites_chk_checkbox); 
       holder.itemname = (TextView) convertView 
         .findViewById(R.id.listitemfavourites_txt_itemname); 
       holder.price = (TextView) convertView 
         .findViewById(R.id.listitemfavourites_txt_price); 
       holder.lin_background = (LinearLayout) convertView 
         .findViewById(R.id.favourites_lin_top); 
       convertView.setTag(holder); 

       holder = (Holder) convertView.getTag(); 

       holder.itemname.setText(alist.get(pos).get("itemname")); 
       holder.price.setText(alist.get(pos).get("price")); 
       holder.checkbox.setChecked(checkBoxState[pos]); 
       if (pos == 0) { 
        holder.lin_background 
          .setBackgroundResource(R.drawable.bg_celltop); 
       } else if (pos == (alist.size() - 1) && alist.size() != 1) { 

        holder.lin_background 
          .setBackgroundResource(R.drawable.bg_cellbottom); 
       } 
       holder.checkbox.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 
         if (((CheckBox) v).isChecked()) 
          checkBoxState[pos] = true; 
         else 
          checkBoxState[pos] = false; 

        } 
       }); 

       return convertView; 
      } 

      class Holder { 
       TextView itemname, price; 
       CheckBox checkbox; 
       LinearLayout lin_background; 
      } 
     }  
    }