如何从Android中的expandablelistview获取onChildClick值? [英] How to get onChildClick value from expandablelistview in android?

查看:81
本文介绍了如何从Android中的expandablelistview获取onChildClick值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在一个项目,该项目将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆