在Android中,每个项目可查看2行和图标

在Android中,每个项目可查看2行和图标,android,android-listview,Android,Android Listview,Hy, 我想在ListView的一个项目中添加一个图标和两行。第一个是值,第二个是值2 String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; String[] values2 = new String[] `en

Hy, 我想在ListView的一个项目中添加一个图标和两行。第一个是值,第二个是值2

String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
String[] values2 = new String[] `enter code here`{ "Android2", "iPhone2",        "WindowsMobile2",
            "Blackberry2", "WebOS2", "Ubuntu2", "Windows72", "Max OS  X2",
            "Linux2", "OS/22" };
我的列表xml是:

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

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

我的每行xml是:

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

<ImageView
    android:id="@+id/icon"
    android:layout_width="22px"
    android:layout_height="22px"
    android:layout_marginLeft="4px"
    android:layout_marginRight="10px"
    android:layout_marginTop="4px"
    android:src="@drawable/ic_launcher" >
</ImageView>

<TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="20px" />

<TextView
    android:id="@+id/label2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label" />

</LinearLayout>

我的代码是:

 public class listaNoua extends ListActivity {
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
    String[] values2 = new String[] { "Android2", "iPhone2", "WindowsMobile2",
            "Blackberry2", "WebOS2", "Ubuntu2", "Windows72", "Max OS X2",
            "Linux2", "OS/22" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>  (this,R.layout.rowlayout, R.id.label2, values2);
    setListAdapter(adapter);

}
公共类listaNoua扩展了ListActivity{
创建公共空间(捆绑冰柱){
超级冰柱;
字符串[]值=新字符串[]{“Android”、“iPhone”、“WindowsMobile”,
“黑莓”、“WebOS”、“Ubuntu”、“Windows7”、“Max OS X”,
“Linux”、“OS/2”};
字符串[]值2=新字符串[]{“Android2”、“iPhone2”、“WindowsMobile2”,
“Blackberry2”、“WebOS2”、“Ubuntu2”、“Windows72”、“Max OS X2”,
“Linux2”、“OS/22”};
ArrayAdapter=新的ArrayAdapter(this,R.layout.rowlayout,R.id.label2,values2);
setListAdapter(适配器);
}
如果我加上:

   ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowlayout,   R.id.label2, values2 , R.id.label, values);
ArrayAdapter adapter=新的ArrayAdapter(this,R.layout.rowlayout,R.id.label2,values2,R.id.label,values);
代码不起作用


有人能帮我吗?

你应该使用列表自定义适配器。你可以在这里找到一些很好的例子

我认为您忘记了行XML中LinearLayout的方向。问题是,默认情况下,LinearLayout具有“水平”方向。该行应如下所示,以显示列表中的所有3项



您可以使用SimpleAdapter进行此操作

    List<Map<String, ?>> data = new ArrayList<Map<String, ?>>();
    data.add(createRow("Android", "Android2"));
    data.add(createRow("iPhone", "iPhone"));

    String[] from = {"value1", "value2"};
    int[] to = {R.id.label, R.id.label2};

    SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_layout, from, to);
List data=new ArrayList();
添加(createRow(“Android”、“Android2”));
添加(createRow(“iPhone”、“iPhone”));
字符串[]from={“value1”,“value2”};
int[]to={R.id.label,R.id.label2};
simpledapter adapter=新的simpledapter(this,data,R.layout.item_布局,from,to);
以及用于创建行的函数

private Map<String, ?> createRow(String value1, String value2) {
    Map<String, String> row = new HashMap<String, String>();
    row.put("value1", value1);
    row.put("value2", value2);
    return row;
}
private Map createRow(字符串值1,字符串值2){
Map row=newhashmap();
第2行,put(“值1”,值1);
第2行“价值2”,第2行;
返回行;
}

Android已经为该应用程序提供了预定义的XML布局,因此您无需编写自己的适配器或布局文件

您只需覆盖
getView
并为已经存在的
simple_list_item_2
布局中预定义的
android.R.id.text1
android.R.id.text2
textview设置值

ArrayAdapter<MyObject> adapter = new ArrayAdapter<MyObject>(this, android.R.layout.simple_list_item_2, android.R.id.text1, result) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView text1 = (TextView) view.findViewById(android.R.id.text1);
        TextView text2 = (TextView) view.findViewById(android.R.id.text2);

        text1.setText(result.get(position).OperatingSystem);
        text2.setText(result.get(position).Platform);
        return view;
    }
};
ArrayAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_2,android.R.id.text1,结果){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=super.getView(位置、转换视图、父级);
TextView text1=(TextView)view.findViewById(android.R.id.text1);
TextView text2=(TextView)view.findViewById(android.R.id.text2);
text1.setText(result.get(position.OperatingSystem));
text2.setText(result.get(position.Platform));
返回视图;
}
};

有关更复杂的绑定,请参见simplelistadapter(基本上是一个ID列表和一个项列表(尽管它仅适用于游标,这意味着在某个地方使用了matrixcursor),它在构造函数ArrayAdapter(listaNoua,int,int,String[],int,String[])中给出了一个错误是未定义的,第一个文本是false,第二个文本是应该的(android2,iphone 2),我应该怎么做?每次尝试都失败自定义此适配器:谢谢,这对我来说是个窍门。你可能想指出,
结果
的类型是
MyObject[]
并保存要添加的对象。或者,可以完全删除此参数,并使用
adapter.add()
adapter.addAll()
添加单个对象。在
getView()
内部,可以使用
getItem(position)
访问列表项。
ArrayAdapter<MyObject> adapter = new ArrayAdapter<MyObject>(this, android.R.layout.simple_list_item_2, android.R.id.text1, result) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView text1 = (TextView) view.findViewById(android.R.id.text1);
        TextView text2 = (TextView) view.findViewById(android.R.id.text2);

        text1.setText(result.get(position).OperatingSystem);
        text2.setText(result.get(position).Platform);
        return view;
    }
};