0

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

我正在尝试设置一个列表视图,其中每一行都有以下内容:

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

我剩下的是设置一个辅助布局 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 行?)?另一种选择是将现有的垂直线性布局包装在另一个具有水平方向的线性布局中,是吗?

这对其他人来说似乎不尴尬和痛苦吗?:)

4

2 回答 2

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;

    }
}
于 2013-04-09T21:33:26.293 回答
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" /> 

于 2013-04-09T21:34:02.607 回答