1

我想知道如何使用 setonItemclick 侦听器方法获取可扩展列表视图的子值。下面给出了我的代码,但单击事件无法正常工作。

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

无需尝试手动获取位置。使用android定义的方法。

这是获取子位置和父位置的方法

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

要获取可扩展列表视图的子元素的值,请调用此函数

   @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;
                }
            });
}

在上面的代码中,您通过创建它的对象来获取子值,因为它是具有许多值的类。

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

如果您的孩子只是 string 或 textview ,在这种情况下,您可以获得类似的值

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

我希望这能解决问题。

于 2016-09-28T18:59:43.550 回答
0

尝试这个 ...

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);
          } 
    }
});

希望这可以帮助..!

于 2017-02-03T12:46:21.900 回答