2011-11-28 10 views
11

multiple_checkboxesसे अधिक चेकबॉक्स

संलग्न छवि में के लिए notifyDataSetChanged, SelectAll checkbox एक गतिविधि में साथ मौजूद है, और एडाप्टर के भीतर सभी checkboxes। यदि मैं checked SelectAll तो सभी चेकबॉक्स एडाप्टर में चेक किए जाते हैं और यदि मैंने अनचेक किया है तो सभी अनचेक किए गए हैं। यह अच्छी तरह से हो रहा है।

लेकिन मैं चाहता हूं कि मैं checked SelectAll और उसके बाद यदि मैं uncheked था एडाप्टर में एक या अधिक चेकबॉक्स तो SelectAll checkbox should unchecked। और अगर चयन करने के लिए चेक के बिना मैं मैन्युअल रूप से एडाप्टर में सभी चेकबॉक्स चेक करता हूं तो SelectAll checkbox should checked स्वचालित रूप से।

मैं यह कैसे कर सकता हूं।

bellow मेरी कोड है।, http://pastebin.com/5pUJJC42

+0

आपको अपनी समस्या का समाधान करने के लिए नीचे दिए गए लिंक को देखना चाहिए .... यहां [link] (http://stackoverflow.com/questions/7738527/getting-an-issue-while-checking-the- गतिशील रूप से -generated-चेकबॉक्स-थ्रू-सूची/7739006 # 7739006)। – himanshu

उत्तर

8

मैं नीचे की तरह किया था और मैं अपने आवश्यक उत्पादन, मिल गया

http://pastebin.com/PgNeDnXq

+0

धन्यवाद। –

2

आप प्रत्येक और हर पर मदों की सूची में और अनुकूलक में आप बूलियन मूल्यों के हिसाब से जाँच की/अनियंत्रित टॉगल चाहिए इसी बूलियन्स की एक सरणी, और अनुकूलक में कर सकते हैं जांचें कि बूलियन सरणी के सभी तत्व सच हैं? फिर setchecked (true) selectall_checkbox अन्यथा इसे सेट चेक (अनचेक) रखें।

+0

मुझे बिल्कुल नहीं मिल रहा है। क्या आप मुझे कुछ नमूना कोड दे सकते हैं – Jyosna

+0

बस मेरे कोड को जांचें जो मैंने संलग्न किया है, मैंने पहले से ही मॉडल क्लास का उपयोग करके ऐसा किया है जहां मैंने एक बुलियन वैरिएबल लिया था, और प्रत्येक चेक के लिए मैं उस बूलियन को मान सेट कर रहा हूं। – Jyosna

+0

नया कोड आज़माएं जिसे मैंने –

2

संपादित

आपका अनुकूलक इस तरह दिखना चाहिए:

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

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

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = null; 

    if(convertView == null) { 
     LayoutInflater inflator = context.getLayoutInflater(); 
     view = inflator.inflate(R.layout.list_items_attendance_payment, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) view.findViewById(R.id.name); 
     viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
     view.setTag(viewHolder); 
    } 
    else { 
     view = convertView; 
    } 

    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.text.setText(list.get(position).getName()); 

    viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     AttendanceActivity.listMember.get(position).setSelected(isChecked); 
     list.get(position).setSelected(buttonView.isChecked()); 
     selectAll.setChecked(areAllSelected()); // We just use the method as parameter as it returns a boolean. 
     } 
    }); 

    if(selectAll.isChecked()) 
     holder.checkbox.setChecked(true); 
    else 
     holder.checkbox.setChecked(list.get(position).isSelected()); 

    return view; 
    } 

    public void deselectAll() { 
    for(Model element : list) 
     element.setSelected(false); 

    notifyDataSetChanged(); 
    } 

    public void selectAll() { 
    for(Model element : list) 
     element.setSelected(true); 

    notifyDataSetChanged(); 
    } 

    private boolean areAllSelected() { 
    for(Model element : list) 
     if(!element.getSelected()) 
     return false; // We conclude that not all are selected. 

    return true; // All of the items were selected 
    } 
} 

और अपने Activity कि सेट OnCheckedChangedListener इस को बदला जाना चाहिए में विधि:

private void onClickSetAllAttendance() { 
    selectAll.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     CheckBox box = (CheckBox) v; 
     box.toggle(); 

     if(box.isChecked()) 
     listAdapter.selectAll(); 
     else 
     listAdapter.deselectAll(); 
    } 
    }); 
} 
+0

जांचें नहीं, यह ठीक से काम नहीं कर रहा है। – Jyosna

+0

मैंने पूरा कार्यान्वयन दिखाने के लिए अपना जवाब बदल दिया है। – kaspermoerch

+0

मैंने इस कोड के साथ प्रयास किया, लेकिन अभी भी कुछ समस्या है। यदि सभी चेक किए गए हैं और यदि मैं उनमें से किसी एक को एडाप्टर से अनचेक कर दूंगा तो चुनें सभी चेकबॉक्स अनचेक होना चाहिए लेकिन यहां सभी अनचेक हो रहे हैं। – Jyosna

3

मैंने कोशिश की यह कुछ ऐसा है,

चेकआउट पास किया गया एडाप्टर क्लास कन्स्ट्रक्टर में सभी चेकबॉक्स और सेटिंग श्रोता वहां ही है ताकि हमें मुख्य कक्षा से किसी भी ध्वज सार्वजनिक स्थैतिक घोषित करने की आवश्यकता न हो।

इसके अलावा मैंने कुछ झंडे जो चेकबॉक्स की स्थिति को बनाए रखते हैं, मैंने यह सुनिश्चित करने की कोशिश की है कि जब चेक चेक चेकबॉक्स चेक बदल दिया जाता है तो यह सूची आइटम चेकबॉक्स को प्रभावित नहीं करता है और सूची आइटम चेकबॉक्स चेक के लिए इसके विपरीत ।

तो, कोशिश इस

public class myAdapter extends ArrayAdapter<Model> { 

    private final List<Model> list; 
    private final Activity context; 
    private CheckBox checkAll; 
    boolean checkAll_flag = false; 
    boolean checkItem_flag = false; 

    public myAdapter(Activity context, List<Model> list, CheckBox checkAll) { 
     super(context, R.layout.row, list); 
     this.context = context; 
     this.list = list; 
     this.checkAll = checkAll; 
     checkAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton checkbox, boolean arg1) { 
       if(!checkItem_flag){ 
        checkAll_flag = true; 
        notifyDataSetChanged(); 
       } 
      } 
     }); 
    } 

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

    private boolean areAllSelected() { 

     boolean areAllSelected = false; 

      for (int i = 0; i < list.size(); i++) { 
       if(list.get(i).isSelected()){ 
        areAllSelected = true; 
       } 
       else{ 
        areAllSelected = false; 
        return areAllSelected; 
       } 
      } 
      return areAllSelected; 
     } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.row, 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()); 

          if(!checkAll_flag){ 
           checkItem_flag = true; 
           if(buttonView.isChecked()){ 
            checkAll.setChecked(areAllSelected()); 
           } 
           if(!buttonView.isChecked()){ 
            checkAll.setChecked(areAllSelected());        
           } 
           checkItem_flag = false; 
          } 
         } 
        }); 
      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());  

     if(checkAll_flag){ 
      if(checkAll.isChecked()){ 
       holder.checkbox.setChecked(true); 
      } 
      else if(!checkAll.isChecked()){ 
       holder.checkbox.setChecked(false); 
      } 
      if(position == (list.size() -1)){ 
       checkAll_flag = false; 
      } 
     } 
     return view; 
    } 
} 
+0

अच्छा प्रयास .. एक बार। उत्तर साझा करने के लिए – Dharmendra

2

यहाँ आप के लिए एक सरल उपाय है।

@Override 
public View getView(int position, View v, ViewGroup arg2) { 
    final PillTime pillTime = arrPillTimes.get(position); 
    if(v == null) { 
     v = inflater.inflate(R.layout.select_time_row, null); 
    } 
    TextView tvTitle = (TextView)v.findViewById(R.id.tvTitle); 
    TextView tvTime = (TextView)v.findViewById(R.id.tvTime); 

    tvTime.setText(pillTime.getTime()); 

    final CheckBox cbtime = (CheckBox)v.findViewById(R.id.cbtime); 
    cbtime.setChecked(false); 
    for (PillTime pillTime2 : arrSelectedTimes) { 
     if(pillTime2.getId().equals(pillTime.getId())) { 
      cbtime.setChecked(true); 
      break; 
     } 
    } 
    tvTitle.setText(pillTime.getTitle()); 
    cbtime.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if(cbtime.isChecked()) { 
       boolean contains = false; 
       for (PillTime pillTime2 : arrSelectedTimes) { 
        if(pillTime2.getId().equals(pillTime.getId())) { 
         contains = true; 
         break; 
        } 
       } 
       if(!contains) { 
        arrSelectedTimes.add(pillTime); 
        if(arrPillTimes.size() == arrSelectedTimes.size()) { 
         cbSelectAll.setChecked(true); 
        } 
       } 
      }else { 
       for (PillTime pillTime2 : arrSelectedTimes) { 
        if(pillTime2.getId().equals(pillTime.getId())) { 
         arrSelectedTimes.remove(pillTime2); 
         cbSelectAll.setChecked(false); 
         break; 
        } 
       } 
      } 
     } 
    }); 

    return v; 
} 

मैं एक मुख्य ArrayList arrPillTimes जो सभी डेटा है है और मैं दूसरे ArrayList arrSelectedTimes जो जाँच पर नज़र रखेंगे है items.We यदि चयनित आइटम arrSelectedTimes में है इसका मतलब है कि आपको लगता है कि आइटम की जाँच कर ली जाँच करेगा इसलिए आपको उस चेकबॉक्स के लिए चेक की गई संपत्ति को सही पर सेट करना होगा।

3

मुझे अतीत में एक समान समस्या थी। Checkable को लागू करने के लिए आपको अपनी पंक्ति दृश्य की आवश्यकता है। this question देखें।

1

इस मुद्दे

मुख्य लिए CheckedTextView उपयोग करके देखें।एक्सएमएल

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

    <ListView 
     android:id="@+id/listView" 
     android:scrollbars="vertical" android:divider="#C0C0C0" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:cacheColorHint="#00000000" android:dividerHeight="1dip"> 
    </ListView> 
    <LinearLayout android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:layout_width="match_parent"> 
     <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="All"></Button> 
     <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="None"></Button> 
     <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Done"></Button> 
    </LinearLayout> 

</LinearLayout> 

listrow.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
    android:background="#ffffff" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="#000000" android:padding="15dip"/> 

CheckedTextVwActivity.java

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.CheckedTextView; 
import android.widget.ListView; 
import android.widget.Toast; 

public class CheckedTextVwActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ListView listView; 
    ListAdapter adapter; 
    ArrayList<String> strings = new ArrayList<String>(); 
    Button button1,button2,button3; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     listView = (ListView) findViewById(R.id.listView); 
     button1 = (Button) findViewById(R.id.button1); 
     button2 = (Button) findViewById(R.id.button2); 
     button3 = (Button) findViewById(R.id.button3); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     strings.add(new String("B")); 
     strings.add(new String("A")); 
     TopicSelectionListAdapter topicSelectionListAdapter = new TopicSelectionListAdapter(
       CheckedTextVwActivity.this, R.layout.listrow, strings); 
     listView.setAdapter(topicSelectionListAdapter); 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     for(int i=0;i<strings.size();i++){ 
      listView.setItemChecked(i, true); 
     } 

     listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View view, int position, 
        long arg3) { 
       CheckedTextView selectedItem = (CheckedTextView) view; 
       boolean isChecked = selectedItem.isChecked(); 
       Log.e("TAG","item clicked position = " + position + " isChecked = " + isChecked);    
      } 
     }); 

     button1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       for(int i=0;i<strings.size();i++){ 
        listView.setItemChecked(i, true); 
       } 
      } 
     }); 

     button2.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       for(int i=0;i<strings.size();i++){ 
        listView.setItemChecked(i, false); 
       } 
      } 
     }); 

     button3.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       int count = listView.getAdapter().getCount(); 
       String savedItems = null; 
       for (int i = 0; i < count; i++) { 

        if (listView.isItemChecked(i)) { 
          savedItems = savedItems + listView.getItemAtPosition(i).toString() + ","; 
        } 

       } 
       Toast.makeText(CheckedTextVwActivity.this, ""+savedItems, Toast.LENGTH_LONG).show(); 
      } 
     }); 


    } 

    public class TopicSelectionListAdapter extends ArrayAdapter { 
     @SuppressWarnings("unchecked") 
     public TopicSelectionListAdapter(Context context, 
       int textViewResourceId, List objects) { 
      super(context, textViewResourceId, objects); 
     } 

     @Override 
     public long getItemId(int currentPosition) { 
      return super.getItemId(currentPosition); 
     } 

     @Override 
     public View getView(int currentPosition, View convertView, 
       ViewGroup parent) { 
      View v = convertView; 
      final LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.listrow, null); 
      final CheckedTextView textView = (CheckedTextView) v 
      .findViewById(R.id.text); 
      textView.setText(strings.get(currentPosition)); 
      return v; 
     } 
    } 
} 
संबंधित मुद्दे