2014-11-03 6 views
0

У меня есть одна проблема с кодом, использующим флажок в виде списка, и у меня есть еще одна проверка, чтобы установить флажок check and unchecked в моем списке, в настоящее время я могу проверить все но проблема заключается только в том, что все флажки отмечены и возвращены, сколько проверок box'x. Главный файл: общественный класс Take1 расширяет активность {Как проверить все флажки в списке в android

EditText dataf,ed2,topic; 
    ListView lv; 
    Spinner sp,datesp,classno; 
    ArrayList<String> al; 
    ArrayAdapter<String> ad,ad2; 
    ListAdapter adapter; 
    String spitem; 
    Button speak,date,from,to; 
    MediaRecorder mrecorder; 
    static final int check=111; 
    private static final int DATE_DIALOG_ID = 0; 
    private static final int FROM_TIME = 1; 
    private static final int TO_TIME = 2; 
    int total,pre,ab,cal=0; 
    TextView present; 
    //database 
    SQLiteDatabase db; 
    Cursor cr; 
    CheckBox checkall; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.take); 
     topic=(EditText)findViewById(R.id.taketopic); 
     sp=(Spinner)findViewById(R.id.takespinner1); 
     datesp=(Spinner)findViewById(R.id.takedatespinner2); 
     classno=(Spinner)findViewById(R.id.noofperiods); 
     speak=(Button)findViewById(R.id.takespeak); 
     date=(Button)findViewById(R.id.takedatebutton); 
     from=(Button)findViewById(R.id.takefrom); 
     to=(Button)findViewById(R.id.taketo); 
     lv=(ListView)findViewById(R.id.takelistview); 
     al=new ArrayList<String>(); 
     present=(TextView)findViewById(R.id.present); 
     present.setVisibility(View.GONE); 
     ad=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,al); 
     ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     checkall=(CheckBox)findViewById(R.id.checkall); 
     datesp.setVisibility(View.GONE); 
     //checkall.setVisibility(View.GONE); 

     assign(); 

     //database 
     db=SQLiteDatabase.openOrCreateDatabase("/sdcard/Attendance/database.db",null); 



     sp.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
             int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       spitem=(String)sp.getItemAtPosition(arg2); 
       final ArrayList<String> ss= new ArrayList<String>(); 

       SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase("/sdcard/Attendance/database.db",null); 
       Cursor cr = db.rawQuery("select numbers from Main where class='"+spitem+"'", null); 
       if(cr!=null) 
       { 
        if(cr.moveToFirst()) 
        { 
         do{ 
          String pp =cr.getString(cr.getColumnIndex("numbers")); 
          String[] pp1=pp.split(","); 
          for(int i=0; i<pp1.length;i++) 
          { 
           ss.add(pp1[i]); 
          } 
          Log.e("data",cr.getString(cr.getColumnIndex("numbers"))); 
         }while(cr.moveToNext()); 
        } 
       } 
       Toast.makeText(getApplicationContext(),"spitem="+spitem,Toast.LENGTH_SHORT).show(); 

       adapter=new ListAdapter(getApplicationContext(),1, 0,ss); 
       lv.setAdapter(adapter); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

     setlist(); 



    } 

ListAdapter Файл:

public class ListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<HashMap<String,Object>> listData; 

    public ListAdapter(Context context, int i, int i1, List<String> objects) { 
     this.context=context; 
     listData =new ArrayList<HashMap<String, Object>>(); 
     for(String value : objects){ 
      HashMap<String,Object> row = new HashMap<String, Object>(); 
      row.put("value",value); 
      row.put("isChecked",Boolean.valueOf(false)); 
      listData.add(row); 
     } 
    } 

    public int selectedItemsSize(){ 
     int size = 0; 
     for(HashMap<String,Object> row : listData){ 
      if((Boolean)row.get("isChecked")){ 
       size++; 
      } 
     } 
     return size; 
    } 

    public ArrayList<String> getSelected(){ 
     ArrayList<String> selected = new ArrayList<String>(); 
     for(HashMap<String,Object> row : listData){ 
      if((Boolean)row.get("isChecked")){ 
       selected.add(row.get("value").toString()); 
      } 
     } 
     return selected; 
    } 

    public void checkAll(){ 
     for(HashMap<String,Object> row : listData){ 
      row.put("isChecked",true); 
     } 
     notifyDataSetChanged(); 
    } 
    public void uncheckAll(){ 
     for(HashMap<String,Object> row : listData){ 
      row.put("isChecked",false); 
     } 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return listData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listData.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Holder holder; 
     if (convertView == null) { 
      holder = new Holder(); 
      convertView = LayoutInflater.from(context).inflate(R.layout.list_row, null); 
      holder.tv = (TextView)convertView.findViewById(R.id.listrowtext); 
      holder.ckbox =(CheckBox)convertView.findViewById(R.id.listrowcheckBox); 

      convertView.setTag(holder); 
     } 
     else{ 
      holder = (Holder) convertView.getTag(); 
     } 


     holder.tv.setText(listData.get(position).get("value").toString()); 
     holder.ckbox.setChecked((Boolean) listData.get(position).get("value")); 
     holder.ckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       listData.get(position).put("isChecked",isChecked); 
       notifyDataSetChanged(); 
      } 
     }); 


     return convertView; 
    } 


    static class Holder 
    { 
     TextView tv; 
     CheckBox ckbox; 
    } 

}

Макет файла: отчет журнала

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

    <TextView 
     android:id="@+id/listrowtext" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="5dp" 
     android:text="Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <CheckBox 
     android:id="@+id/listrowcheckBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="10dp" 
     android:text="" /> 

</RelativeLayout> 

Emulator: FATAL ИСКЛЮЧЕНИЕ: главный

java.lang.ClassCastException: java.lang.String 
at works.Attendance.ListAdapter.getView(ListAdapter.java:101) 
at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
at android.widget.ListView.makeAndAddView(ListView.java:1745) 
at android.widget.ListView.fillDown(ListView.java:670) 
at android.widget.ListView.fillFromTop(ListView.java:727) 
at android.widget.ListView.layoutChildren(ListView.java:1598) 
at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
at android.view.View.layout(View.java:7175) 
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912) 
at android.view.View.layout(View.java:7175) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
at android.view.View.layout(View.java:7175) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
at android.view.View.layout(View.java:7175) 
at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3683) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
at dalvik.system.NativeStart.main(Native Method) 
+0

Теперь я могу проверить все флажки, но когда я назову «pre = adapter.selectedItemsSize();» из файла Take1 он возвращает 0, и я не получаю значение checkbox. – Murali

ответ

1

Попробуйте этот путь, надежда это поможет вам решить вашу проблему.

Возьми ArrayList из HashMap, которые держат список вашего строкового значения, а также список проверку пункта состояния и определить checkAll и uncheckAll два пользовательских метод для проверки всех и снимите весь элемент списка, список изменений контрольного пункта состояние на OnCheckedChangeListener базы по пункту должность.

public class ListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<HashMap<String,Object>> listData; 

    public ListAdapter(Context context,List<String> objects) { 
     this.context=context; 
     listData =new ArrayList<HashMap<String, Object>>(); 
     for(String value : objects){ 
      HashMap<String,Object> row = new HashMap<String, Object>(); 
      row.put("value",value); 
      row.put("isChecked",Boolean.valueOf(false)); 
      listData.add(row); 
     } 
    } 

    public int selectedItemsSize(){ 
     int size = 0; 
     for(HashMap<String,Object> row : listData){ 
      if((Boolean)row.get("isChecked")){ 
       size++; 
      } 
     } 
     return size; 
    } 

    public ArrayList<String> getSelected(){ 
     ArrayList<String> selected = new ArrayList<String>(); 
     for(HashMap<String,Object> row : listData){ 
      if((Boolean)row.get("isChecked")){ 
       selected.add(row.get("value").toString()); 
      } 
     } 
     return selected; 
    } 

    public void checkAll(){ 
     for(HashMap<String,Object> row : listData){ 
      row.put("isChecked",true); 
     } 
     notifyDataSetChanged(); 
    } 
    public void uncheckAll(){ 
     for(HashMap<String,Object> row : listData){ 
      row.put("isChecked",false); 
     } 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return listData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listData.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Holder holder; 
     if (convertView == null) { 
      holder = new Holder(); 
      convertView = LayoutInflater.from(context).inflate(R.layout.list_row, null); 
      holder.tv = (TextView)convertView.findViewById(R.id.listrowtext); 
      holder.ckbox =(CheckBox)convertView.findViewById(R.id.listrowcheckBox); 

      convertView.setTag(holder); 
     } 
     else{ 
      holder = (Holder) convertView.getTag(); 
     } 


     holder.tv.setText(listData.get(position).get("value").toString()); 
     holder.ckbox.setChecked((Boolean) listData.get(position).get("value")); 
     holder.ckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       listData.get(position).put("isChecked",isChecked); 
       notifyDataSetChanged(); 
      } 
     }); 


     return convertView; 
    } 


    static class Holder 
    { 
     TextView tv; 
     CheckBox ckbox; 
    } 

} 
+0

для вышеуказанного адаптера списка есть какие-либо изменения, необходимые в моем основном файле. мой основной код файла обновлен в моем вопросе.please см. один раз. – Murali

+0

спасибо за вашу помощь. Наконец-то я получил его. – Murali

+0

@ Murali, Рад помочь вам, и если ans решит вашу проблему, тогда вы можете одобрить ans, чтобы он помог другим решить ту же проблему. –

0

Я хотел бы добавить метод внутри ListAdapter и перебрать все элементы, проверяя, если точка зрения instance of CheckBox, а затем сделать эту работу?

public ListAdapter ... { 

    public void checkAll() { 
     for (int position = 0; position < getCount(); position++) { 
      final View view = getView(i); 
      if (view instanceof CheckBox) { 
       ((CheckBox) view).setChecked(true); 
      } 
     } 
    } 

} 

Если я mystaken, пожалуйста, покажите YOUT R.layout.list_row файл макета.

+0

Спасибо за резонанс. Пожалуйста, сделайте эту услугу – Murali

+0

http://stackoverflow.com/questions/20489901/how-to-check-all-checkboxes-in-a-listview – Naufal

+0

Как я могу позвонить - это checkAll() из основного файла – Murali

0

Что вы имеете в виду? «Проблема только в том, что все флажки отмечены и возвращены, сколько проверили box'x«?

Вы не должны сделать новый экземпляр адаптера каждый раз, просто обновить состояние проверки в списке и уведомит данные изменились, то GetView будет называться обновить ListView

Смежные вопросы