我想知道如何使用setonItemclick侦听器方法获取可扩展列表视图的子值。 我的代码如下所示,但是click事件无法正常工作。
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);
}
}
});
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
获取可扩展listview的子元素的值 调用此函数
@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);
如果您的孩子只是字符串或文本视图,那么您可以获得像
这样的值 final String selected = (String) expListAdapter.getChild(
groupPosition, childPosition);
我希望这能解决问题。
答案 2 :(得分: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);
}
}
});
希望这可以帮助..!