0

CheckedTextView가있는 사용자 지정 목록보기가 있습니다. 항목을 클릭하면 객체의 선택된 상태를 토글하지 않고 UI에 반영합니다.CheckedTextView does not Toggle

dialog_categories.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/parentPanel" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginEnd="8dip" 
    android:layout_marginStart="8dip" 
    android:background="@color/primary_white" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/title_template" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="16dip" 
     android:layout_marginStart="16dip" 
     android:gravity="center_vertical|start" 
     android:orientation="horizontal" 
     android:paddingTop="5dp" > 

     <TextView 
      android:id="@+id/textView1" 
      style="?android:attr/textAppearanceLarge" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:paddingLeft="10dp" 
      android:text="@string/dialog_category_title" 
      android:textColor="@color/primary_color" 
      android:textSize="22sp" /> 

     <TextView 
      android:id="@+id/all" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/dialog_category_checkbox" 
      android:textColor="@color/primary_color" /> 

     <CheckBox 
      android:id="@+id/checkBoxAll" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingRight="6dp" /> 
    </LinearLayout> 

    <View 
     android:id="@+id/titleDivider" 
     android:layout_width="match_parent" 
     android:layout_height="2dip" 
     android:background="@color/black" /> 

    <LinearLayout 
     android:id="@+id/contentPanel" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:minHeight="64dp" 
     android:orientation="vertical" > 

     <ListView 
      android:id="@+id/listViewDialog" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 
     </ListView> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/buttonPanel" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/button_category_ok" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/dialog_category_btn_ok" 
      android:textSize="14sp" /> 
    </LinearLayout> 

</LinearLayout> 

dialog_list_item_category.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <CheckedTextView 
     android:id="@+id/categories_checkbox" 
     android:layout_width="fill_parent" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:gravity="center_vertical" 
     android:onClick="toggle" 
     android:text="sss" /> 

</RelativeLayout> 

CategoriesDialogFragment.java

public class CategoriesDialogFragment extends SherlockDialogFragment { 
    CheckBox checkAll; 
    ListView categoriesListView; 
    CategoriesListAdapter adapter; 
    static Category category; 

    String[] categories = new String[] { "Hill Station", "Beach", "Historic", 
      "Wild Life", "Waterfall", "River", "Archeology" }; 
    String[] categories_state = new String[] { "1", "0", "1", "1", "1", "1", 
      "0" }; 

    public static CategoriesDialogFragment newInstance() { 
     CategoriesDialogFragment frag = new CategoriesDialogFragment(); 
     Bundle args = new Bundle(); 
     frag.setArguments(args); 
     return frag; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Dialog dialog = new Dialog(MainActivity.context); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

     dialog.setContentView(R.layout.dialog_categories); 

     categoriesListView = (ListView) dialog 
       .findViewById(R.id.listViewDialog); 

     List<Category> theCategories = new ArrayList<Category>(); 
     for (int i = 0; i < categories.length; i++) { 
      Category pl = new Category(categories[i], false); 
      theCategories.add(pl); 
     } 

     categoriesListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     adapter = new CategoriesListAdapter(MainActivity.context, 
       R.layout.dialog_list_item_category, theCategories); 

     categoriesListView.setAdapter(adapter); 


     checkAll = (CheckBox) dialog.findViewById(R.id.checkBoxAll); 
     checkAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, 
        boolean isChecked) { 

       Toast.makeText(MainActivity.context, "Check", 
         Toast.LENGTH_SHORT).show(); 

       if (isChecked) { 
        for (int i = 0; i < adapter.getCount(); i++) { 
         category = adapter.getItem(i); 
         category.setChecked(true); 
        } 
        adapter.notifyDataSetChanged(); 
       } else { 
        for (int i = 0; i < adapter.getCount(); i++) { 
         category = adapter.getItem(i); 
         category.setChecked(false); 
        } 
        adapter.notifyDataSetChanged(); 
       } 

      } 
     }); 
     return dialog; 

    } 

    private static class CategoriesListAdapter extends ArrayAdapter<Category> { 
     public Context mContext; 

     List<Category> mCategories; 

     public CategoriesListAdapter(Context context, int resource, 
       List<Category> categories) { 
      super(context, resource, categories); 
      // TODO Auto-generated constructor stub 
      this.mCategories = categories; 
      this.mContext = context; 

     } 

     public int getCount() { 
      return mCategories.size(); 
     } 

     @Override 
     public Category getItem(int position) { 
      // TODO Auto-generated method stub 
      return mCategories.get(position); 
     } 

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

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      ViewHolder holder; 

      if (convertView == null) { 
       LayoutInflater viewInflater; 
       viewInflater = LayoutInflater.from(getContext()); 
       convertView = viewInflater.inflate(
         R.layout.dialog_list_item_category, null); 

       holder = new ViewHolder(); 
       holder.categoryName = (CheckedTextView) convertView 
         .findViewById(R.id.categories_checkbox); 

       convertView.setTag(holder); 

      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      holder.categoryName.setText(mCategories.get(position) 
        .getCategoryName()); 

      return convertView; 
     } 

     static class ViewHolder { 
      CheckedTextView categoryName; 
     } 
    } 
} 
+1

'CheckedTextView'를'RelativeLayout'에 랩핑 할 필요가 없습니다. 래퍼'RelativeLayout'을 제거하십시오. – Luksprog

+0

@Luksprog 와우 효과가 있습니다. 수표와 수표가 왜 그것과 관련되어 있는지 궁금해합니다. –

+0

@Luksprog 나는 상태를 기반으로 모든 항목을 선택/선택 해제하고자하는 CheckAll 버튼이 있습니다. 그것이 어떻게 될 수 있는지 어떤 생각? –

답변

1

방금 ​​android.R.layout.simple_list_item_multiple_choice 대신 dialog_list_item_category.xml 사용할 수 어디서나 사용할 수 있습니까?

업데이트 : Luksprog의 코멘트 @는 솔루션입니다 다음 RelativeLayout를 제거하고 그냥 android.R.layout.simple_list_item_multiple_choice와 같이 작동합니다.

+0

나는이 카테고리를 다 했어 ListView.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); –

+0

이 (가) 답변을 업데이트했습니다. –

1

당신은 적절한 XML을 사용하고 있습니까? 이 dialog_list_item_categories.xml 입니다하지만 코드에서 당신은 이 R.layout.dialog_list_item_category

+0

미안하지만 오타되었습니다. 질문을 작성 –