1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Checkboxes checken funktioniert nicht richtig...

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von grevenilvec, 07.04.2011.

  1. grevenilvec, 07.04.2011 #1
    grevenilvec

    grevenilvec Threadstarter Erfahrener Benutzer

    Beiträge:
    225
    Erhaltene Danke:
    39
    Registriert seit:
    10.03.2011
    Hallo Leute,

    brauche dringend Hilfe. Ich hab hier ne Listview die aus Einträgen besteht, die angeglickt werden können, die lang angeglickt werden können und die ne Checkbox besitzen. Die ersten beiden Sachen funktionieren einwandfrei, die Checkbox dafür gar nicht. Wenn ich eine von den Checkboxen anklicke, werden die falschen oder noch zusätzliche Boxen selektiert/deselektiert. Im Internet hab ich bis jetz hierfür keine Lösung gefunden. Bin kurz vorm Verzweifeln.

    Hier mal der Code von meinem Adapter zum Erstellen der Listview:
    Code:
    package org.openintents.filemanager;
    import java.util.ArrayList;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnClickListener;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.TextView;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    public class CustomSettingsAdapter extends BaseAdapter{
     private static ArrayList<SettingItem> settingsArrayList; 
     private LayoutInflater mInflater;
     public CustomSettingsAdapter(Context context, ArrayList<SettingItem> sitems)
     {
      settingsArrayList = sitems;
      mInflater = LayoutInflater.from(context);
     }
     public int getCount()
     {
      return settingsArrayList.size();
     }
     public Object getItem(int position)
     {
      return settingsArrayList.get(position);
     }
     
     public ArrayList<SettingItem> getItemList()
     {
      return settingsArrayList;
     }
     public long getItemId(int position)
     {
      return position;
     }
     public View getView(final int position, View convertView, ViewGroup parent) {
      final ViewHolder holder;
      if (convertView == null)
      {
       convertView = mInflater.inflate(R.layout.settings_item, null);
       holder = new ViewHolder();
       holder.txtName = (TextView) convertView.findViewById(R.id.setting_name);
       holder.details = (TextView) convertView.findViewById(R.id.setting_detail);
       holder.cb = (CheckBox) convertView.findViewById(R.id.check);
       convertView.setTag(holder);
      }
      else
      {
       holder = (ViewHolder) convertView.getTag();
      }
      holder.txtName.setText(settingsArrayList.get(position).getName());
      holder.details.setText(settingsArrayList.get(position).getPath());
      holder.cb.setChecked(settingsArrayList.get(position).getState());
      int[]tags = new int[2];
      tags[0]= position;
      tags[1]= 0;
      holder.cb.setTag(tags);
      
      holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
       
       @Override
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        
        int[]i=(int[])holder.cb.getTag();
        settingsArrayList.get(i[0]).setState(isChecked);
        notifyDataSetChanged();
       }
      });
      return convertView;
     }
     static class ViewHolder
     {
      TextView txtName;
      TextView details;
      CheckBox cb;
     }
    }
    
    
    Vielen Dank schonmal für eure Hilfe!!!
    grüße greven
     
  2. grevenilvec, 07.04.2011 #2
    grevenilvec

    grevenilvec Threadstarter Erfahrener Benutzer

    Beiträge:
    225
    Erhaltene Danke:
    39
    Registriert seit:
    10.03.2011
    Ok, für alle die n ähnliches Problem haben, habs gelöst in dem ich den setChecked Aufruf unter den setOnCheckChanged Aufruf verschoben habe.
    Versteh zwar grad ned wirklich, was der Unterschied is, aber funktionieren tuts. ^^
     

Diese Seite empfehlen