Как использовать Android ExpandableListView в XML? - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь показать расширяемыйСписок с кнопкой перед ним в XML. но почему-то я не мог заставить его работать в коде.

мой xml (я использую RelativeLayout в качестве родительского макета):

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/mlt_file_titleFrame"
    android:background="#FF3300"
    android:padding="5dp"
    android:id="@+id/mlt_file_frameL"
    >

    <Button
        android:id="@+id/mlt_file_btn_edit"
        android:text="Edit"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="left"
        />

</FrameLayout>

<ExpandableListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/mlt_file_frameL"
    >

</ExpandableListView>

мой код:

public class MLT_File extends ExpandableListActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mlt_file_intent);
    // Set up our adapter
    ExpandableListAdapter listAdapter = new customListAdapter();

    ExpandableListView expLV = (ExpandableListView) findViewById(R.id.mlt_expList);//getExpandableListView();
    expLV.setAdapter(listAdapter);

    //registerForContextMenu(expLV);

}//onCreate

/**
 * A simple adapter which maintains an ArrayList of photo resource Ids. 
 * Each photo is displayed as an image. This adapter supports clearing the
 * list of photos and adding a new photo.
 *
 */
public class customListAdapter extends BaseExpandableListAdapter {
    // Sample data set.  children[i] contains the children (String[]) for groups[i].
    private File mapFolder = new File (Environment.getExternalStorageDirectory(),"/MLT/Map");
    private File recordFolder = new File (Environment.getExternalStorageDirectory(),"/MLT/Record");
    private File scribbleFolder = new File (Environment.getExternalStorageDirectory(),"/MLT/Scribble");
    private String[] groups = { "Map", "Record", "Scribble" };
    private String[][] children = { mapFolder.list(), recordFolder.list(), scribbleFolder.list() };

    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 textView = new TextView(MLT_File.this);
        textView.setBackgroundColor(Color.BLACK);
        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        textView.setPadding(100, 0, 0, 0);
        textView.setTextColor(Color.WHITE);
        textView.setTextSize(20);
        textView.setText(getChild(groupPosition, childPosition).toString());
        return textView;
    }//getChildView

    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 textView = new TextView(MLT_File.this);
        textView.setBackgroundColor(Color.WHITE);
        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        textView.setPadding(100, 0, 0, 0);
        textView.setTextColor(Color.BLACK);
        textView.setTextSize(25);
        textView.setText(getGroup(groupPosition).toString());

        /*Button btn = new Button(MLT_File.this);
        btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        btn.setText("Edit");
        btn.setId(100+groupPosition);
        btn.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT);

        TableLayout layout = new TableLayout(MLT_File.this);
        layout.setBackgroundColor(Color.WHITE);
        layout.setColumnStretchable(1, true);
        layout.addView(textView);
        //layout.addView(btn);*/

        return textView;
    }

    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    public boolean hasStableIds() {
        return true;
    }

}//customListAdapter
}//class

мой logcat:

java.lang.RuntimeException: Your content must have a ExpandableListView whose id attribute is 'android.R.id.list'

Я пытался изменить идентификатор на id = "android: id / list", но я не знаю, как создать объект ExpandableListView с этим идентификатором, поскольку он выдает ошибку, сообщающую, что он пуст.

* impt: я хотел создать объект ExpandableListView так, чтобы я мог приводить onChildClickListener.

Ответы [ 2 ]

1 голос
/ 19 января 2012

В файле xml измените идентификатор, то есть идентификатор по умолчанию на настроенный идентификатор

<ExpandableListView 
    android:id="@+id/expandablelist"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/mlt_file_frameL"
    >

</ExpandableListView>

В Activity вместо открытый класс MLT_File расширяет ExpandableListActivity запись открытый класс MLT_File расширяет Activity с помощью extends Activity мы можем написать собственный (настраиваемый) расширяемый список, а затем использовать

expLV= new ExpandableAdapter(Expandablelist.this);
setListAdapter(expLV);

использовать разные макеты для группы и дочернего элемента

1 голос
/ 19 января 2012

Попробуйте этот код -

Main.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/listView"
    android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none"></ExpandableListView>
</LinearLayout>

ChildLayout.xml -

<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="45dip"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/ImageView01" android:src="@drawable/icon"
    android:layout_height="40dip" android:layout_width="40dip" android:layout_marginLeft="40dip"></ImageView>
<TextView android:layout_width="fill_parent"
    android:layout_height="45dip" android:paddingLeft="5dip"
    android:paddingRight="5dip" android:textStyle="bold" android:textSize="17dip"
    android:gravity="center_vertical" android:id="@+id/tvChild"
    android:text="Children" android:textColor="#ffCCCC22"></TextView>
</LinearLayout>

Grouplayout.xml -

<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="45dip"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/title">
<ImageView android:id="@+id/ImageView01" android:src="@drawable/icon"
    android:layout_height="40dip" android:layout_width="40dip" android:layout_marginLeft="40dip"></ImageView>
<TextView android:id="@+id/tvGroup" android:layout_width="fill_parent"
    android:layout_height="45dip" android:text="Groups" android:gravity="center_vertical|right"
    android:paddingLeft="5dip" android:paddingRight="5dip"
    android:textColor="#ffffffff" android:textStyle="bold"
    android:textSize="17dip"></TextView>
</LinearLayout>

Это макеты для CustomExpandable ListView.

Вы можете попробовать это со всем кодом из здесь.

...