在android中定制listview

在android中定制listview,android,android-layout,Android,Android Layout,使用preferenceActivity,我创建了一个包含不同表单小工具的列表 例如:带复选框的3行 2带搜索条 如何自定义列表视图项。在同一个列表视图中,我想创建不同的项目,有些带有复选框,有些带有切换按钮,等等 任何帮助都将不胜感激。要自定义listview,以便添加按钮,这些按钮不是列表元素的一部分,而是listview屏幕的一部分,例如,您可以创建一个listview.xml文件,如下所示(我省略了不重要的部分): 如果要自定义单个元素,请执行以下操作,创建一个文件,如list_item

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

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


任何帮助都将不胜感激。

要自定义listview,以便添加按钮,这些按钮不是列表元素的一部分,而是listview屏幕的一部分,例如,您可以创建一个listview.xml文件,如下所示(我省略了不重要的部分):

如果要自定义单个元素,请执行以下操作,创建一个文件,如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类中,执行以下操作:

@Override
public void onCreate(Bundle savedInstanceState)
{
  setContentView(R.layout.listview);
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);
  }
}
类custaryadapter扩展了ArrayAdapter
{
CustraryAdapter()
{
super(getApplicationContext(),R.layout.list_项,R.id.listlabel,ListActivity.arrayofdata);
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
国际杂志;
字符c;
视图行=转换视图;
if(行==null)
{
LayoutInflater充气机=getLayoutInflater();
行=充气机。充气(R.layout.list\u项,父项,false);
}
TextView标签=(TextView)row.findViewById(R.id.listlabel);
ImageView图标=(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]);
返回(行);
}
}

顺便说一下,最后一个代码块的作用是,当它们滚动到视图中时,它会“动态”生成listview项。与在内存中创建所有项目相比,这是一个重大改进,后者将导致您的内存很快耗尽!很多Android设备上的内存都很有限。

谢谢,我明白了,但是我应该做些什么修改来允许不同类型的行出现在列表视图中,谢谢你,阿加尼还没有这样做,但我认为在CustArrayAdapter()类中,你可以选择“if arrayofdata[position].somevalue==anothervalue”之类的选项然后创建此\u列表\u项,否则创建另一个\u列表\u项。
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);
  }
}