ExpandableList View не расширяется

Я пытаюсь персонализировать ExpandableLisTview

я создаю

  • Iterator.Xml: с представлением ExpandableList
  • group.xml: относительный макет с простым TextView и кнопкой
  • 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;
    }
  }
}

Проблема в том, что я могу правильно получить элементы, но когда я пытаюсь расширить группу, это не работает.

Есть идеи?


РЕДАКТИРОВАТЬ: взгляды

Итератор.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>

Группа.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>

Ребенок.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>

person moktar    schedule 02.04.2011    source источник
comment
Вы нашли решение для этого? У меня точно такая же проблема.   -  person dineth    schedule 12.09.2011


Ответы (2)


У нас нет доступа к вашим представлениям, поэтому я изменил ваш код, чтобы использовать жестко закодированные 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);

    }

}
person sksamuel    schedule 02.04.2011
comment
это тоже должно работать, но я пытаюсь сделать это с файлами XML :( - person moktar; 02.04.2011

Вы добавили 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>
person Dennis Winter    schedule 28.06.2011