Wie erhalte ich die ID der Kontrollkästchen in der erweiterten Listenansicht?

Ich habe eine erweiterte Listenansicht, die Kontrollkästchen in übergeordneten Knoten sowie untergeordneten Elementen enthält. Alle Daten stammen vom Webservice und sind daher dynamisch.

Bild angehängt:

Klicken Sie nun auf den Menüpunkt Ich möchte alle Kontrollkästchen-Status abrufen. Bitte leiten Sie mich, wie ich ID der darin verwendeten Kontrollkästchen erhalten kann.

Code beigefügt:

<code>/**
 * 
 */


    public class Object_SecurityActivity extends ExpandableListActivity {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub
            return super.onChildClick(parent, v, groupPosition, childPosition, id);
        }

        @Override
        public void onContentChanged() {
            // TODO Auto-generated method stub
            super.onContentChanged();
        }

        private AndroidClientEntity obj_android_client;
        private static final String LOG_TAG = "ElistCBox2";
        private String username, password, clientname;

        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            //setContentView(R.layout.main);
            Intent security_intent = getIntent();
            String id = security_intent.getStringExtra("id");
            obj_android_client = (AndroidClientEntity) getApplicationContext();
            username = obj_android_client.getUsername();
            password = obj_android_client.getPassword();
            clientname = obj_android_client.getClientName();
            new Securityasync().execute(username, password, clientname, id);

        }

        class Securityasync extends AsyncTask<String, String, String> {
            String sesurity_response = null;
            ProgressDialog dialog;
            private Expandable_list_Adapter expListAdapter;

            @Override
            protected String doInBackground(String... params) {
                if ((isOnline(Object_SecurityActivity.this).equals("true"))) {
                    Security_service security_obj = new Security_service();
                    try {
                        sesurity_response = security_obj.getUsersRoles(params[0],
                                params[1], params[2], params[3]);
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return null;
            }

            @Override
            protected void onPostExecute(String result) {
                if (isOnline(Object_SecurityActivity.this).equals("true")) {

                    setContentView(R.layout.layout_expandable_listview);
                    ArrayList<String> groupNames = new ArrayList<String>();
                    ArrayList<String> sub = new ArrayList<String>();
                    ArrayList<ArrayList<String>> child = new ArrayList<ArrayList<String>>();
                    ArrayList<String> sub_id = new ArrayList<String>();
                    ArrayList<String> objrid = new ArrayList<String>();
                    try {
                        JSONArray json = new JSONArray(sesurity_response);
                        // JSONArray json_child=new JSONArray(sesurity_response);
                        for (int i = 0; i < json.length(); i++) {
                            JSONObject json_obj = json.getJSONObject(i);
                            if (json_obj.getString("PRid").equalsIgnoreCase("0")) {

                                String ObjectRid = json_obj.getString("ObjectRid");
                                int m=0;
                                objrid.add(m,ObjectRid);
                                m++;
                                groupNames.add(json_obj.getString("Name"));
                                for (int j = 0; j < json.length(); j++) {

                                    JSONObject json_child = json.getJSONObject(j);
                                    if (ObjectRid.equalsIgnoreCase(json_child
                                            .getString("PRid"))) {
                                        int n=0;
                                        sub_id.add(n,json_child.getString("ObjectRid"));
                                        sub.add(json_child.getString("Name"));
                                    }

                                }
                                child.add(sub);

                            }

                        }
                        expListAdapter = new Expandable_list_Adapter(getBaseContext(),
                                groupNames, child);
                        setListAdapter(expListAdapter);
                        Log.e("size in error", "son " + json.length());
                    } catch (JSONException e) {
                        Log.e("", "", e);
                        Toast.makeText(getBaseContext(), "parsing error",
                                Toast.LENGTH_LONG).show();
                    }
                    Log.e("sizeof list", ""+sub_id.size());
                    Iterator itr=objrid.iterator();


                    while(itr.hasNext()){
                        Log.e("id","value "+itr.next());
                    }

                }
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();

            }
        }

    }
</code>

Und Adapterklasse:

<code>public class Expandable_list_Adapter extends BaseExpandableListAdapter implements OnCheckedChangeListener {

    private Context context;
    private ArrayList<String> groupNames;
    private ArrayList<ArrayList<String>> child;
    private LayoutInflater inflater;

    public Expandable_list_Adapter(Context context, 
                        ArrayList<String> groupNames,
                        ArrayList<ArrayList<String>> child ) { 
        this.context = context;
        this.groupNames= groupNames;
        this.child = child;
        inflater = LayoutInflater.from( context );
    }

    public Object getChild(int groupPosition, int childPosition) {
        return child.get( groupPosition ).get( childPosition );
    }

    public long getChildId(int groupPosition, int childPosition) {
        return (long)( groupPosition*1024+childPosition );  // Max 1024 children per group
    }

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View v = null;
        if( convertView != null )
            v = convertView;
        else
            v = inflater.inflate(R.layout.child_row, parent, false); 
       String c = (String)getChild( groupPosition, childPosition );
        TextView color = (TextView)v.findViewById( R.id.childname );
        if( color != null )
            color.setText( c );

        CheckBox cb = (CheckBox)v.findViewById( R.id.check1 );

        //cb.setChecked(false);
        cb.setOnCheckedChangeListener(this);
        return v;
    }

    public int getChildrenCount(int groupPosition) {
        return child.get( groupPosition ).size();
    }

    public Object getGroup(int groupPosition) {
        return groupNames.get( groupPosition );        
    }

    public int getGroupCount(){
         return groupNames.size();
    }
    public long getGroupId(int groupPosition) {
        return (long)( groupPosition*1024 );  // To be consistent with getChildId
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View v = null;
        if( convertView != null )
            v = convertView;
        else
            v = inflater.inflate(R.layout.group_row, parent, false); 
        String gt = (String)getGroup( groupPosition );
        TextView colorGroup = (TextView)v.findViewById( R.id.childname );
        if( gt != null )
            colorGroup.setText( gt );
        CheckBox cb = (CheckBox)v.findViewById( R.id.check2 );
        cb.setChecked(false);
        return v;
    }

    public boolean hasStableIds() {
        return true;
    }

    public boolean isChildSelectable(int groupPosition, int childPosition) {
        Log.e("is group checked","group "+groupPosition);
        Log.e("selectable","has" +childPosition);
        return true;
    } 

    public void onGroupCollapsed (int groupPosition) {}
    public void onGroupExpanded(int groupPosition) {}

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // TODO Auto-generated method stub

    }
public void isChecked(){

}

}
</code>

Child.xml

<code><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
      android:background="#21415A"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/childname"
         android:paddingLeft="50px"
         android:focusable="false"
         android:textSize="14px"
         android:textStyle="italic"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>

    <TextView android:id="@+id/rgb"
         android:focusable="false"
         android:textSize="14px"
         android:textStyle="italic"
         android:layout_width="100px"
         android:layout_height="wrap_content"/>

    <CheckBox
        android:id="@+id/check1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:focusable="false" />

</RelativeLayout>
</code>

parent.xml ist dasselbe wie child.

Bitte leiten Sie mich, wie ich IDs von Kontrollkästchen erhalten kann, da ich auf dem ausgewählten Menüpunkt Grundlagen der Bedienung zu tun habe.

Bearbeiten: Ich habe versucht, setTag () und getTag (). Jetzt zeigt die erweiterbare Listenansicht ein merkwürdiges Verhalten. Wenn ich ein Kontrollkästchen auswähle und eine andere Gruppe erweitere, werden alle Kontrollkästchen auf den Standardwert gesetzt. Was muss ich in diesem Fall tun? Ich kenne die resion nicht, warum es nicht Zustand speichert. Ich stehe vor dem gleichen Problem wieSeltsames Verhalten in Expandablelistview - Android PLZ-Führer

Antworten auf die Frage(4)

Ihre Antwort auf die Frage