如何从Android中的expandablelistview获取onChildClick值? [英] How to get onChildClick value from expandablelistview in android?
问题描述
我正在一个项目,该项目将JSON从url解析为ExpandableListView.根据状态"标签值(活动或未决),将相应地将记录放置到活动"和待定"的不同组中.一切正常.
I am working on a project with parsing JSON from url to ExpandableListView. Depending on the "status" tag value (active or pending) , will be placing records accordingly to to different groups "Active" and "Pending". Everything is working fine.
我的问题是,当我单击第二组中的一个孩子时,该孩子应该显示不同的数据,但是我正在从第一组中的孩子那里获取数据.
My Problem is when I click on a child inside the second group which should show different data, but I am getting data the data from first group child.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.ListView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.OnGroupClickListener;
public class ExpandableActivity1 extends ExpandableListActivity {
JSONArray jArray = null;
JSONObject json_data = null;
TextView txtMLSID;
List<Map<String, String>> child1;
List<Map<String, String>> child2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
List<Map<String, String>> groups = new ArrayList<Map<String, String>>();
Map<String, String> group1 = new HashMap<String, String>();
group1.put("group", " Active");
groups.add(group1);
Map<String, String> group2 = new HashMap<String, String>();
group2.put("group", " Pending");
groups.add(group2);
child1 = new ArrayList<Map<String, String>>();
child2 = new ArrayList<Map<String, String>>();
String url ="http://stage.realtylog.net/iPhone/functions.php?username=hussain16&act=listing";
String json = JSONfunctions.getJSONfromURL(url);
try{
jArray = new JSONArray(json);
for(int i=0;i<jArray.length() ;i++){
Map<String, String> childdata1 = new HashMap<String, String>();
JSONObject e = jArray.getJSONObject(i);
String status = e.getString("2");
Log.e("log_tag","Status: "+status);
if (status.contains("active")){
Log.e("log_tag","StatusActive: "+status);
childdata1.put("0", String.valueOf(i+1)+" "+ e.getString("mlsid"));
child1.add(childdata1);
}else if(status.contains("pending")){
Log.e("log_tag","StatusPending: "+status);
Map<String, String> childdata2= new HashMap<String, String>();
childdata2.put("0", String.valueOf(i+1)+" "+ e.getString("mlsid"));
child2.add(childdata2);
}
}
}catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
}
List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>();
childs.add(child1);
childs.add(child2);
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this, groups, R.layout.groups, new String[] { "group" },
new int[] { R.id.group }, childs, R.layout.childs,
new String[] { "0"}, new int[] { R.id.child });
setListAdapter(adapter);
}
@Override
public boolean setSelectedChild(int groupPosition, int childPosition,
boolean shouldExpandGroup) {
//do something
Log.e("log_tag","setSelectedChild: ");
return super.setSelectedChild(groupPosition, childPosition,
shouldExpandGroup);
}
@Override
public void setSelectedGroup(int groupPosition) {
//do something
Log.e("log_tag","setSelectedGroup: ");
super.setSelectedGroup(groupPosition);
}
**//Here I am Getting problem**
@SuppressWarnings("unchecked")
public boolean onChildClick(
ExpandableListView parent,
View v,
int groupPosition,
int childPosition,
long id) {
Log.d( "LOG_TAG", "onChildClick: "+"GROUP: "+groupPosition+" CHILD Position: "+ childPosition);
HashMap<String, String> o = (HashMap<String, String>) parent.getItemAtPosition(childPosition+1);
String val = o.get("0");
Log.d( "LOG_TAG", "selected value : "+val );
return false;
}
}
公共布尔onChildClick()调用时的LogCat信息:
LogCat Info when public boolean onChildClick () called :
10-20 11:24:28.004: DEBUG/LOG_TAG(1652): onChildClick: GROUP: 0 CHILD Position: 0
10-20 11:24:28.004: DEBUG/LOG_TAG(1652): selected value : 1 555
10-20 11:24:42.454: DEBUG/LOG_TAG(1652): onChildClick: GROUP: 1 CHILD Position: 0
10-20 11:24:42.454: DEBUG/LOG_TAG(1652): selected value : 1 555
Logcat显示我为group1(活动)和group2(待定)获得了相同的价值
Logcat shows that I am getting same value for group1(Active) and group2(Pending)
每个基于点击的子视图都需要特定的值.
I need specific value for each child view based on click.
推荐答案
您必须使用Adapter的 getChild(groupPosition,childPosition)
方法来检索child实例并将其强制转换为Map和使它工作.
You have to use Adapter's getChild(groupPosition, childPosition)
method to retrieve the instance of child and the cast it to your Map and get it working.
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(this, (String)((Map<String, String>)
adapter.getChild(groupPosition, childPosition)).get("lalit"),
Toast.LENGTH_LONG).show();
return super.onChildClick(parent, v, groupPosition, childPosition, id);
}
这篇关于如何从Android中的expandablelistview获取onChildClick值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!