问题
I'm trying to personalize an ExpandableLisTview
I create
- Iterator.Xml: with The ExpandableList View
- group.xml:A relative Layout with a simple TextView and a Button
- Child.xml:A relative layout with just a textView
Class:
package Android.MyExapandableListView;
import android.app.Activity;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
public class main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.iterator);
ExpandableListView lv =
(ExpandableListView) this.findViewById(R.id.ExpandableListView);
MyExpandableListAdapter questions = new MyExpandableListAdapter();
lv.setAdapter(questions);
}
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private LayoutInflater inflater = null;
private String[] groups = { "People Names", "Dog Names", "Cat Names",
"Fish Names" };
private String[][] children = { { "Arnold", "Barry", "Chuck", "David" },
{ "Ace", "Bandit", "Cha-Cha", "Deuce" }, { "Fluffy", "Snuggles" },
{ "Goldy", "Bubbles" } };
public MyExpandableListAdapter(){
this.inflater = main.this.getLayoutInflater();
}
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return children[groupPosition].length;
}
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.child, null);
TextView question = (TextView) convertView.findViewById(R.id.nomChild);
question.setText(getChild(groupPosition, childPosition).toString());
return convertView;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TextView textView = getGenericView();
// textView.setText(getGroup(groupPosition).toString());
convertView = inflater.inflate(R.layout.group, null);
TextView question = (TextView) convertView.findViewById(R.id.nomGroup);
question.setText(getGroup(groupPosition).toString());
return convertView;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}
}
The problem is that I can get the items correctly but when I'm trying to expand the group,it doesn't work.
Any idea?
EDIT: the views
Iterator.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ExpandableListView
android:id="@+id/ExpandableListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
>
</ExpandableListView>
</LinearLayout>
Group.XML
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<RelativeLayout
android:id="@+id/widget29"
android:layout_width="305px"
android:layout_height="41px"
android:layout_x="8px"
android:layout_y="29px">
<TextView
android:id="@+id/nomGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
>
</TextView>
<Button
android:id="@+id/widget31"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
>
</Button>
</RelativeLayout>
</AbsoluteLayout>
Child.XML
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<RelativeLayout
android:id="@+id/nomChild"
android:layout_width="305px"
android:layout_height="41px"
android:layout_x="8px"
android:layout_y="29px"
>
<TextView
android:id="@+id/widget30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
>
</TextView>
</RelativeLayout>
</AbsoluteLayout>
回答1:
We don't have access to your views, so I changed your code to use hard-coded TextView's and it works fine for me. Take a look and maybe you can spot an error in what we can't see.
public class Main extends Activity {
class MyExpandableListAdapter extends BaseExpandableListAdapter {
private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };
private String[][] children = { { "Arnold", "Barry", "Chuck", "David" },
{ "Ace", "Bandit", "Cha-Cha", "Deuce" },
{ "Fluffy", "Snuggles" }, { "Goldy", "Bubbles" } };
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return children[groupPosition].length;
}
public View getChildView(int groupPosition,
int childPosition,
boolean isLastChild,
View convertView,
ViewGroup parent) {
TextView question = new TextView(Main.this);
question.setText(getChild(groupPosition, childPosition).toString());
return question;
}
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
TextView question = new TextView(Main.this);
question.setText(getGroup(groupPosition).toString());
return question;
}
public boolean hasStableIds() {
return true;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExpandableListView lv = new ExpandableListView(this);
MyExpandableListAdapter questions = new MyExpandableListAdapter();
lv.setAdapter(questions);
LinearLayout ll = new LinearLayout(this);
setContentView(ll);
ll.addView(lv);
}
}
回答2:
have you added android:focusable="false"
to your button definition? this solved a similar behaviour for me.
<Button
android:id="@+id/widget31"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:focusable="false"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true">
</Button>
来源:https://stackoverflow.com/questions/5522480/expandablelist-view-dont-expand