Android:使用删除按钮设置ListView

时间:2013-04-09 21:23:24

标签: android layout android-activity android-listview android-linearlayout

有类似的问题,但我没有看到一个回答这个非常直接的问题:如何设置一个混合布局的自定义列表视图?

我正在尝试设置列表视图,其中每行包含以下内容:

主文本行,辅助(子)文本行和删除按钮。另一种方法是在可见空间的页眉或页脚处使用删除按钮选择每一行(但显然是在可滚动空间之外)。老实说,在这一点上哪个更容易是可取的。

我剩下的就是设置一个二级布局xml来定义每个行元素,但在里面我正在寻找另一个布局来将按钮与文本布局的垂直方向分开。

这是我目前的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <ListView android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:choiceMode="multipleChoice"
    android:id="@+id/android:list"/>  
</LinearLayout>

每行的布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">
  <TextView android:id="@+id/line_a"
    android:textSize="14dp"
    android:textColor="#FFFFFF"
    android:textStyle="italic"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
  <TextView android:id="@+id/line_b"
    android:textSize="12dp"
    android:textColor="#BFFF00"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>

这为ListView中的每一行设置了一个漂亮的多色两级文本。

接下来是什么?要在右侧添加一个按钮,我需要设置另一个布局(网格可能是?2列1行?),右侧有一个按钮?另一种选择是将现有的垂直线性布局包裹在另一个水平方向的线性布局中,是吗?是的。

这对其他人来说是不是很尴尬和痛苦? :)

2 个答案:

答案 0 :(得分:2)

创建一个listView一个ArrayAdapter:

listView = (ListView) findViewById(R.id.listView);
listViewArrayAdapter listViewArrayAdapter = new listViewArrayAdapter(this, values);
listView.setAdapter(listViewArrayAdapter);

然后创建一个内部类:

public class ListViewArrayAdapter extends ArrayAdapter<Value> {

    Context context;
    Value[] values;

    public ListViewArrayAdapter(Context context, Value[] values) {
        super(context, R.layout.layout_with_list, values);
        this.values = values;
        this.context = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.list_item, parent, false);

        TextView titleTextView = (TextView) convertView.findViewById(R.id.titleTextView);
        titleTextView.setText(values[position].getName());
            // If you have buttons in your list_item.xml, you can inflate them an then create a listener for them

        return convertView;

    }
}

答案 1 :(得分:0)

为什么不使用相对布局,我已经在3小时前做了这个。这是我的ItemRow代码。我认为处理这个按钮的onClick方法更加棘手。在我的代码中,第二个图像是删除按钮,图像白色onClick方法。我扩展了ArrayAdapter,因为我希望这个图像仅在编辑模式下可见,比如删除Iphone中的联系人项目

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView android:id="@+id/image_list_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:contentDescription="@string/image_view"
    android:src="@drawable/clock_white" />
<TextView android:id="@+id/text_list_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_toRightOf="@id/image_list_icon"
    android:paddingLeft="5dp"
    android:text="@string/hello_world" />
<ImageView android:id="@+id/image_list_remove"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:contentDescription="@string/image_view"
    android:src="@drawable/remove" />  
<TextView android:id="@+id/text_list_time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_toLeftOf="@id/image_list_remove"
    android:paddingRight="10dp"
    android:text="@string/text_x" />