jak uzyskać identyfikator pól wyboru w rozwiniętym elemencie widoku listy?
Mam rozszerzony widok listy, który ma pola wyboru w węzłach nadrzędnych, a także elementy podrzędne. wszystkie dane pochodzą z serwisu internetowego, więc jego dynamika.
Dołączony obraz:
Teraz w pozycji menu kliknij Chcę pobrać wszystkie pola wyboru. proszę, poprowadź mnie, jak mogę uzyskać identyfikator używanych w nim pól wyboru.
dołączony kod:
<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>
I klasa adaptera:
<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 jest taki sam jak dziecko.
proszę, poprowadź mnie, jak mogę uzyskać identyfikatory pól wyboru, ponieważ w wybranym elemencie menu muszę wykonać podstawowe operacje.
Edytuj: próbowałem ustawić setTag () i getTag (). ale teraz rozwijany widok listy pokazuje dziwne zachowanie. gdy zaznaczę pole wyboru i rozwinę inną grupę, wszystkie pola chekbok są ustawione na domyślne. Co mam zrobić w tym przypadku. Nie wiem, dlaczego nie zapisuje stanu. mam taki sam problem jakDziwne zachowanie w Expandablelistview - Android Przewodnik po Plz