Tôi có chế độ xem danh sách được mở rộng có các hộp kiểm trong các nút cha cũng như các mục con. tất cả dữ liệu đến từ dịch vụ web nên năng động của nó.cách lấy id của các hộp kiểm trong mục xem danh sách mở rộng?
Hình ảnh kèm theo:
Bây giờ trên menu nhấp tôi muốn lấy tất cả trạng thái hộp kiểm. xin vui lòng hướng dẫn tôi làm thế nào tôi có thể nhận được id của hộp kiểm được sử dụng trong nó.
mã kèm theo:
/**
*
*/
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();
}
}
}
Và bộ chuyển đổi lớp:
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(){
}
}
Child.xml
<?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>
parent.xml là giống như đứa trẻ.
hãy hướng dẫn tôi làm cách nào tôi có thể nhận id của hộp kiểm vì trên mục menu được chọn, tôi phải thực hiện các thao tác cơ bản về điều đó.
Chỉnh sửa: tôi đã cố gắng setTag() và getTag(). nhưng giờ đây, chế độ xem danh sách có thể mở rộng đang hiển thị hành vi lạ. khi tôi chọn một hộp kiểm và mở rộng một nhóm khác, tất cả các hộp chekbok được đặt thành mặc định. Những gì tôi phải làm trong trường hợp này. tôi không biết resion tại sao nó không phải là tiết kiệm nhà nước. tôi đang faceing cùng một vấn đề như Strange behaviour in Expandablelistview - Android Plz hướng dẫn
tốt để xem giải quyết vấn đề của riêng mình – Trikaldarshi
công việc tốt @Rajiv –
cảm ơn @Photon và Avi –