0

J'ai une liste personnalisée qui a CheckedTextView. Lorsque je clique sur les éléments, il ne bascule pas l'état vérifié de l'objet et reflète dans l'interface utilisateur.CheckedTextView doesnt bascule

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

Il n'est pas nécessaire d'envelopper 'CheckedTextView' dans un' RelativeLayout', de supprimer le wrapper 'RelativeLayout'. – Luksprog

+0

@Luksprog wow qui a fonctionné. Je me demandais pourquoi la vérification et décocher est liée à cela. –

+0

@Luksprog J'ai un bouton CheckAll que je veux vérifier/décocher tous les éléments en fonction de l'état. une idée de comment cela peut-il être fait? –

Répondre

1

Pourriez-vous utiliser juste android.R.layout.simple_list_item_multiple_choice au lieu de dialog_list_item_category.xml?

Mise à jour: @ commentaire de Luksprog est la solution: Retirez le RelativeLayout et il fonctionne comme avec android.R.layout.simple_list_item_multiple_choice.

+0

J'ai fait ce categoriesListView.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); –

+0

a mis à jour sa réponse ... –

1

Utilisez-vous le bon xml? Il y a dialog_list_item_categories.xml mais dans votre code que vous utilisez partout R.layout.dialog_list_item_category

+0

désolé que c'était une faute de frappe quand écrire la question –

Questions connexes