当我想设置适配器以显示项目时,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
的构造函数的第三个参数,程序出错,我也感到困惑。
答案 0 :(得分:2)
您的布局使用对我来说似乎很奇怪。您正尝试将项目的相同布局作为屏幕布局。这样做会导致你的项目里面也有ListView,这是错误的。如下所示更改适配器:
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
答案 1 :(得分:2)
LinearLayout
将orientation
设置为默认设置为horizontal
,并且该布局中的TextView
将width
设置为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);
如果您没有为每个列表项使用自定义布局