【问题标题】:Android: Setting up ListView with delete buttonAndroid:使用删除按钮设置 ListView
【发布时间】:2013-04-09 21:23:24
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    创建一个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;
    
        }
    }
    

    【讨论】:

    • 谢谢阿里。我假设我正在膨胀的“list_item”布局对应于我上面共享的行布局?
    【解决方案2】:

    你为什么不使用相对布局,我已经在 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" /> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多