无法显示ListView

时间:2012-03-31 10:00:28

标签: android android-listview

当我想设置适配器以显示项目时,ListView不显示任何内容。为了简化问题,我将所有代码都放在Activity的{​​{1}}方法中:

onCreate()

我的public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.result); mListView = (ListView)this.findViewById(R.id.list); String[] items = new String[] {"Item 1", "Item 2", "Item 3"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.result, R.id.test, items); mListView.setAdapter(adapter); handleIntent(getIntent()); }

result.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"> <TextView android:id="@+id/test" android:layout_height="wrap_content" android:layout_width="match_parent" /> <ListView android:id="@+id/list" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout> 应该在ListView开始后很快显示为项[1-3],但屏幕只会打印黑色背景和标题栏。通过将Activity传递给R.id.list的构造函数的第三个参数,程序出错,我也感到困惑。

5 个答案:

答案 0 :(得分:2)

您的布局使用对我来说似乎很奇怪。您正尝试将项目的相同布局作为屏幕布局。这样做会导致你的项目里面也有ListView,这是错误的。如下所示更改适配器:

ArrayAdapter<String> adapter =
      new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

答案 1 :(得分:2)

LinearLayoutorientation设置为默认设置为horizontal,并且该布局中的TextViewwidth设置为android:layout_width="match_parent"所以它使用它的所有父宽度。这会将您的ListView元素推到活动窗口之外,您将无法看到它。像这样修改你的result.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">

    <TextView
        android:id="@+id/test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

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

</LinearLayout>

另外请不要重复使用活动布局作为ListView行布局,而是仅为行使用特定的布局设计(不使用ListView元素)。

答案 2 :(得分:1)

你应该在Activity上调用setListAdapter而不是直接在listview上调用setAdapter。

因此,在您的onCreate方法中,请执行setListAdapter(adapter);而不是mListView.setAdapter(adapter)

来自docs

  

您必须使用ListFragment.setListAdapter()将列表与适配器相关联。不要直接调用ListView.setAdapter(),否则将跳过重要的初始化。

答案 3 :(得分:0)

尝试像这样设置适配器..

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, items);

答案 4 :(得分:0)

只需替换此行

  ArrayAdapter<String> adapter =
  new ArrayAdapter<String>(this, R.layout.result, R.id.test, items);

代码中的

  ArrayAdapter<String> adapter =
  new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items); 

如果您没有为每个列表项使用自定义布局