【问题标题】:Android: How to put ListView in XML?Android:如何将 ListView 放入 XML?
【发布时间】:2011-11-21 09:36:55
【问题描述】:

我想制作一个显示联系人列表(姓名、姓氏)的简单应用。我的代码:

package lista.android;

import java.util.*;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.*;

class Contact{
    String nume;
    String prenume;

    Contact(String nume, String prenume){
        this.nume=nume;
        this.prenume=prenume;
    }

    public String toString(){
        return prenume +" "+ nume;
    }
}

public class Lista1Activity extends ListActivity {
    /** Called when the activity is first created. */
    ArrayList <Contact> lista;
    ArrayAdapter <Contact> adaptor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setListAdapter(adaptor);

        lista=new ArrayList<Contact>();
        adaptor=new ArrayAdapter<Contact>(this, R.id.element, lista);

        adaugaContact("Florian", "Iancu");
        adaugaContact("Ioana", "Constantina");

    }

    public void adaugaContact(String nume, String prenume){
        lista.add(new Contact(nume, prenume));
        adaptor.notifyDataSetChanged();
    }
}

在 XML 中,我有一个 LinearLayout 和一个 TextView 这是列表元素。当我运行它时,模拟器说"Sorry, the application [...] has stopped unexpectedly. Please try again." LogCat 告诉我我必须有一个ListView,它的id 是android.R.id.lista。如果我在 XML 文件中创建一个随机的 ListView 字段并给它“lista” id,它仍然不起作用。如何从 XML 调用 ListView 以匹配我的 Java 代码中的某些内容?换句话说,我知道我错了,但我在哪里以及如何解决它?

【问题讨论】:

  • 您尝试先设置列表适配器,然后再创建它。你不觉得这是错的吗!
  • 我认为你需要先了解创建列表视图的概念。

标签: android xml listview


【解决方案1】:

在 LinearLayout 中你必须指定 ListView 组件。

您的 ma​​in.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:id="@+id/sampleListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="5dp"
        android:background="@android:color/transparent"
        android:cacheColorHint="@android:color/transparent"
        android:divider="#CCCCCC"
        android:dividerHeight="1dp"
        android:paddingLeft="2dp" >
    </ListView>

</LinearLayout>

然后为列表视图做一个布局:list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:padding="10dp"    android:textSize="16sp" >
</TextView>

像这样更改您的活动类

public class Lista1Activity extends ListActivity {
    ArrayList<Contact> lista;
    ArrayAdapter<Contact> adaptor;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    lista = new ArrayList<Contact>();
    adaugaContact("Florian", "Iancu");
    adaugaContact("Ioana", "Constantina");

     adaptor = new ArrayAdapter<String>(this, R.layout.list_item, lista);

    setListAdapter(adaptor);
    }

    public void adaugaContact(String nume, String prenume) {
    lista.add(new Contact(nume, prenume));
    adaptor.notifyDataSetChanged();
    }
}

【讨论】:

  • 正如我所说,我尝试在我的 XML 中添加一个 listview 字段,但它必须与我的 Java 代码相关联。我在哪里绑定它,我该怎么做?谢谢!
  • 好的,所以您建议在使用“适配器”之前对其进行实例化。这是一个很好的观点,但它仍然不起作用,同样的例外:“需要一个 id 为 android.R.id.list 的列表视图”。文档说明了 ListView lv = getListView();我如何将它加入到我的代码中?
  • 我已经编辑了答案。由于您扩展了 ListActivity,ListView lv = getListView(); 将在您的活动中实例化 ListView。
  • 您可以使用平台提供的列表项设计,而不是为ListAdapter定义自己的布局文件(list_item.xml)。例如,尝试使用 android.R.layout.simple_list_item_1 而不是 R.layout.list_item。
  • 我也应该重写 onListItemClick() 函数。感谢您的时间和答案! :D
【解决方案2】:
<?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:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:divider="#000000"
    android:dividerHeight=".5dpdp"
    android:paddingLeft="1dp" />
</LinearLayout>

【讨论】:

  • 正如我所说,我尝试在我的 XML 中添加一个 listview 字段,但它必须与我的 Java 代码相关联。我在哪里绑定它,我该怎么做?谢谢!
【解决方案3】:

听起来你需要再看看the documentation

那里描述得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多