ExpandableList视图不会展开

时间:2011-04-02 09:55:39

标签: android android-widget expandablelistview expandablelistadapter

我正在尝试个性化ExpandableLisTview

我创建

  • Iterator.Xml:使用ExpandableList视图
  • group.xml:具有简单TextView和Button
  • 的相对布局
  • Child.xml:只有textView的相对布局

类别:

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

问题是我可以正确地获取项目但是当我尝试扩展该组时,它不起作用。

有什么想法吗?


编辑:观点

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>

2 个答案:

答案 0 :(得分:1)

我们无权访问您的观点,因此我将您的代码更改为使用硬编码的TextView,它对我来说很好。看一看,也许你可以发现我们看不到的错误。

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

    }

}

答案 1 :(得分:1)

您是否在按钮定义中添加了android:focusable="false"?这为我解决了类似的行为。

<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>