0

展開可能なリスト ビューを含むアプリを開発しています。

展開可能なリスト ビューで、子ビューごとに異なるレイアウトを設定したいと考えています。

私のカスタム Expandable リスト アダプターを以下に示します。

public Object getGroup(int arg0) 
{
    // TODO Auto-generated method stub
    return menu[arg0];
}

public int getGroupCount()
    {
    // TODO Auto-generated method stub
    return menu.length;
}

public long getGroupId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}

public View getGroupView(int position, boolean arg1, View view, ViewGroup parent) 
{
    if(view==null)
    {
        view = inflater.inflate(R.layout.edit_head, null);

    }
    TextView head = (TextView)view.findViewById(R.id.list_item_text_view_head);
    head.setText(menu[position]);
    return view;
}

public Object getChild(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return null;
}

public long getChildId(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return 0;
}

public View getChildView(int groupPosition, int childPosition, boolean arg2, View childView,
        ViewGroup parent) 
{
    if(childView==null)
    {
        childView = inflater.inflate(R.layout.edit_child, null, false);
    }

    return childView;
}

しかし、リストをクリックすると、その子が表示されません。

4

1 に答える 1

2

独自のアダプターを作成できます。

 public class ExpandableAdapter extends BaseExpandableListAdapter {

        @SuppressWarnings("unused")
        private Context context;
        private ArrayList<String> groups;
        private ArrayList<ArrayList<Expand>> expand;
        private LayoutInflater inflater;

        public ExpandableAdapter(Context context, 
                            ArrayList<String> groups,
                            ArrayList<ArrayList<Expand>> expand) { 
            this.context = context;
            this.groups = groups;
            this.expand = expand;
            inflater = LayoutInflater.from( context );
        }
        public Object getChild(int groupPosition, int childPosition) {
            return expand.get( groupPosition ).get( childPosition );
        }

        public long getChildId(int groupPosition, int childPosition) {
            return (long)( groupPosition*50+childPosition );
        }
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
                View convertView, ViewGroup parent) {
            View v = null;
            if( convertView != null )
                v = convertView;
            else
                v = inflater.inflate(R.layout.child_row, parent, false); 
            Expand c = (Expand)getChild( groupPosition, childPosition);
            TextView color = (TextView)v.findViewById( R.id.grp_child_primero);
            if( color != null )
                color.setText( c.getTitulo());
            TextView rgb = (TextView)v.findViewById( R.id.grp_child_segundo);
            if( rgb != null )
                rgb.setText( c.getDato());
            return v;
        }

        public int getChildrenCount(int groupPosition) {
            return expand.get( groupPosition ).size();
        }
        public Object getGroup(int groupPosition) {
            return groups.get( groupPosition );        
        }
        public int getGroupCount() {
            return groups.size();
        }

        public long getGroupId(int groupPosition) {
            return (long)( groupPosition*50 );
        } 
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 
                                                                            ViewGroup parent) {
            View v = null;
            if( convertView != null )
                v = convertView;
            else
                v = inflater.inflate(R.layout.group_row, parent, false); 
            String gt = (String)getGroup( groupPosition );
            TextView expandGroup = (TextView)v.findViewById( R.id.grp_child_primero);
            if( gt != null )
                expandGroup.setText( gt );
            return v;
        }
        public boolean hasStableIds() {
            return true;
        }
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        } 
        public void onGroupCollapsed (int groupPosition) {} 
        public void onGroupExpanded(int groupPosition) {}

    }

行に 1 つの xml を使用:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/negro">

    <TextView android:id="@+id/grp_child_primero"
         android:focusable="false"
         android:textSize="20sp"
         android:textStyle="bold"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center_vertical"
         android:background="@drawable/negro"/>

    <TextView android:id="@+id/grp_child_segundo"
         android:focusable="false"
         android:textSize="18sp"
         android:textStyle="normal"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center_vertical"
         android:background="@drawable/negro"/>

</LinearLayout>

その他のグループ向け:

<?xml version="1.0" encoding="utf-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/negro">

    <TextView android:id="@+id/grp_child_primero"
         android:layout_width="wrap_content"
         android:paddingLeft="30dp"
         android:textSize="20sp"
         android:textColor="@drawable/blanco"
         android:textStyle="normal"
         android:layout_height="wrap_content"
         android:gravity="center_horizontal|center_vertical"
         android:background="@drawable/negro"/>

</LinearLayout>

それとその後:

ExpandAdapter youadapter = new ExpandAdapter(getApplicationContext(), 
        namesGroups, nameChilds);
setListAdapter(youadapter);

namesGroups と nameChilds には、行とグループのデータがリストされています。メソッド setListAdapter を使用すると、アダプターを ExpandableListActivity に設定できます;) 最後に、Expand クラスは単純な POJO です。

public class Expand {
    public String titulo = null;
    public String dato = null;

    public Expand( String titulo, String dato) {
        this.titulo = titulo;
        this.dato = dato;
    }
    public String getTitulo() {
        return titulo;
    }
    public String getDato() {
        return dato;
    }
}

主に getChildView メソッド (ExpandableAdapter クラス内) が実装されているように見えますが、必要なものを実装するのが複雑だと思わない場合は内部にいくつかあります。

于 2013-01-15T17:35:03.890 に答える