1

I want to know how to get the child value of an expandable listview using setonItemclick listener method. My code is given below but click event is not working properly.

mExpandableListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int groupPosition,
                long id) {
            // TODO Auto-generated method stub
            int itemType = ExpandableListView.getPackedPositionType(groupPosition);
            Log.i("item type",""+itemType);
            if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                  childPosition = ExpandableListView.getPackedPositionChild(id);
                  groupPosition = ExpandableListView.getPackedPositionGroup(id);
                  Log.i("child",""+ childPosition);
                  Log.i("child Group",""+ groupPosition);
              } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                  groupPosition = ExpandableListView.getPackedPositionGroup(id);
                  Log.i("Group",""+ groupPosition);
              } 
        }
    });
4

3 に答える 3

3

There is no need of trying to get positions manually. Use android defined methods.

This is the method for getting child position and parent position

public class MainActivity extends Activity {

    private ExpandableListView mExpandableListView;
    private List<GroupEntity> mGroupCollection;
     private int childPosition;
        private int groupPosition;
        boolean retVal;

        ExpandableListAdapter adapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
        prepareResource();
        initPage();


        /*mExpandableListView.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
              public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                  int itemType = ExpandableListView.getPackedPositionType(id);

            if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                      childPosition = ExpandableListView.getPackedPositionChild(id);
                      groupPosition = ExpandableListView.getPackedPositionGroup(id);
                      Log.i("child",""+ childPosition);
                      Log.i("child Group",""+ groupPosition);
                      //do your per-item callback here
                      return retVal; //true if we consumed the click, false if not
                  } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                      groupPosition = ExpandableListView.getPackedPositionGroup(id);
                      //do your per-group callback here
                      Log.i("Group",""+ groupPosition);
                      return retVal; //true if we consumed the click, false if not
                  } else {
                      // null item; we don't consume the click
                      return false;
                  }
            }
          });*/


    }


    private void prepareResource() {

        mGroupCollection = new ArrayList<GroupEntity>();

        for (int i = 1; i < 7; i++) {
            GroupEntity ge = new GroupEntity();
            if (i == 1)
                ge.Name = "Basic Info";
            if (i == 2)
                ge.Name = "Acadamic Background";
            if (i == 3)
                ge.Name = "Experience";
            if (i == 4)
                ge.Name = "Skill";
            if (i == 5)
                ge.Name = "Objective";
            if (i == 6)
                ge.Name = "Reference";
            for (int j = 1; j < 8; j++) {
                GroupItemEntity gi = ge.new GroupItemEntity();
                if (i == 1 && j == 1)
                    gi.Name = "FirstName";
                if (i == 1 && j == 2)
                    gi.Name = "MiddleName";
                if (i == 1 && j == 3)
                    gi.Name = "LastName";
                if (i == 1 && j == 4)
                    gi.Name = "Address";
                if (i == 1 && j == 5)
                    gi.Name = "Sex";
                if (i == 1 && j == 6)
                    gi.Name = "Merital stutas";
                if (i == 1 && j == 7)
                    gi.Name = "Date Of Birthday";
                ge.GroupItemCollection.add(gi);
            }
            mGroupCollection.add(ge);
        }

    }

    private void initPage() {
        mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
         adapter = new ExpandableListAdapter(this,
                mExpandableListView, mGroupCollection);
        mExpandableListView.setAdapter(adapter);
        registerForContextMenu(mExpandableListView);
    }

    public boolean onChildClick( ExpandableListView parent, View v, int groupPosition,int childPosition,long id) {
        System.out.println("Inside onChildClick at groupPosition = " + groupPosition +" Child clicked at position " + childPosition);

        return true;
    }

}
于 2012-07-16T10:35:57.560 に答える
1

To get the value of child element of expandable listview call this function

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);           
 ExpandList = (ExpandableListView) findViewById(R.id.exp_list);
            ExpListItems = SetStandardGroups();
            ExpAdapter = new ExpandListAdapter(MainActivity.this, ExpListItems);
            ExpandList.setAdapter(ExpAdapter);

            ExpandList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

                @Override
                public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                    //get the cuurrnt clicked child object
                    Child child = (Child) ExpAdapter.getChild(groupPosition, childPosition);
                    //System.err.println("child clicked");
                    Intent intent = new Intent(MainActivity.this, jai_ganesh.class);
                    intent.putExtra("message", child.getName());// get the child  name and sent to next activity
                    startActivity(intent);
                   // Toast.makeText(getApplicationContext(), child.getName()+" child clicked", Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
}

In above code you get the child value by creating it's object that because it's class with many value.

Child child = (Child) ExpAdapter.getChild(groupPosition, childPosition);

if your child is only string or textview , in that case you can get value like

 final String selected = (String) expListAdapter.getChild(
 groupPosition, childPosition);

I hope this solves the problem.

于 2016-09-28T18:59:43.550 に答える
0

Try this ...

mExpandableListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View v, int groupPosition,
            long id) {
        // TODO Auto-generated method stub
        // add this code 
        String child = (String) listAdapter.getChild(groupPosition, childPosition);
        int itemType = ExpandableListView.getPackedPositionType(groupPosition);
        Log.i("item type",""+itemType);
        if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
              childPosition = ExpandableListView.getPackedPositionChild(id);
              groupPosition = ExpandableListView.getPackedPositionGroup(id);
              Log.i("child",""+ childPosition);
              Log.i("child Group",""+ groupPosition);
              // to get value of child
              Log.i("child Name",+ child.toString());
          } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
              groupPosition = ExpandableListView.getPackedPositionGroup(id);
              Log.i("Group",""+ groupPosition);
          } 
    }
});

Hope this can help ..!

于 2017-02-03T12:46:21.900 に答える