在android中自定义listview

时间:2012-01-30 23:28:09

标签: android android-layout

使用preferenceActivity,我创建了一个包含不同表单小工具的列表 例如:3行带复选框 2有搜索栏

我们如何自定义列表视图项。在同一个列表视图中,我想创建不同的项目,一些带有复选框,另一些带有切换按钮等等。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

要自定义列表视图,以便添加不属于列表元素但是作为整体列表视图屏幕一部分的按钮,您可以创建一个像这样的listview.xml文件(我遗漏了不重要的部分):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TextView
    android:id="@+id/textv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
(...)
  />

  <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
(...)
  />

  <Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
(...)
  />

  <ListView
    android:id="@android:id/listv"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
(...)
  />

</RelativeLayout>

然后创建像这样的listview:

@Override
public void onCreate(Bundle savedInstanceState)
{
  setContentView(R.layout.listview);

如果要自定义单个元素,请执行以下操作,创建list_item.xml等文件。此示例在左侧添加了一个imageview,在右侧添加了一个textview,textview用于显示列表项的文本。添加按钮,你有什么品味:

<?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="horizontal">
  <ImageView
    android:id="@+id/icon"
    android:padding="4dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/icon"
  />
  <TextView
    android:id="@+id/listlabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="4dp"
    android:textSize="16sp"
  />
</LinearLayout>

在ArrayAdapter类中执行以下操作:

class CustArrayAdapter extends ArrayAdapter<String>
{
  CustArrayAdapter()
  {
    super(getApplicationContext(), R.layout.list_item, R.id.listlabel, ListActivity.arrayofdata);
  }

  public View getView(int position, View convertView, ViewGroup parent)
  {
    int mag;
    char c;

    View row=convertView;
    if (row==null)
    {
      LayoutInflater inflater=getLayoutInflater();
      row=inflater.inflate(R.layout.list_item, parent, false);
    }

    TextView label=(TextView)row.findViewById(R.id.listlabel);
    ImageView icon=(ImageView)row.findViewById(R.id.listicon);

    label.setText(ListActivity.arrayofdata[position]);
    label.setTextColor(Color.parseColor("#ff1111"));
    icon.setImageResource(R.drawable.icon);

    label.setText(ListActivity.arrayofdata[position]);

    return (row);
  }
}

顺便说一句,最后一个代码块的作用是当它们滚动到视图时“动态”生成列表视图项。这是一个重大的改进,而不是已经在内存中创建了所有项目,后者将导致你的内存耗尽非常快!许多Android设备上的内存很少。