我遇到了一个问题,列表视图一次只能显示一行,即使有很多行。这个列表视图包含在一个选项卡中,所以问题可能不在列表视图中,而是在选项卡中。 我首先尝试在单独的布局文件中定义列表视图,并在创建选项卡时使用该文件。当那样做不起作用时,我将其放入带有选项卡定义的FrameLayout中。 结果相同。
<?xml version="1.0" encoding="utf-8"?>
<TabHost android:layout_width="fill_parent"
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost">
<LinearLayout android:id="@+id/LinearLayout01"
android:orientation="vertical" android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_height="fill_parent" android:layout_width="wrap_content"></TabWidget>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<ListView android:id="@+id/list1" android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView></FrameLayout>
</LinearLayout>
</TabHost>
这是我用来创建和添加选项卡的代码:
protected void addTab(String tabName, TabHost.TabContentFactory tabFactory){
TabSpec tabSpec = tabHost.newTabSpec(tabName);
tabSpec.setIndicator(tabName);
tabSpec.setContent(tabFactory);
tabHost.addTab(tabSpec);
tabs.add(new TabDetails(tabName,tabFactory));
}
我会把它称为:
addTab("Medical Center Tests",this);
并包含以下代码以创建选项卡内容:
@Override
public View createTabContent(String tag) {
// Get the data returned from the servelet and display it in the ListView
data = getDataArray(this.getIntent().getExtras());
ListView lv = (ListView) contentView.findViewById(R.id.list1);
lv.setAdapter(new MyMedicalCentersTestsScreenAdapter(this,lv,data));
return lv;
}
所有数据都在那里。只是列表视图的高度等于一行的高度。
编辑:
我添加了一些调试命令来查看 getView 请求的位置。它仅请求第一行,然后随着我的滚动一个接一个地请求它们。因此,它明确地将其视为小型列表视图并相应地滚动它们。
编辑2:
决定尝试一个实验。为列表视图返回一个简单的列表。
ListView lv = (ListView) contentView.findViewById(R.id.list1);
// create some dummy strings to add to the list
List<String> list1Strings = new ArrayList<String>();
list1Strings.add("Item 1");
list1Strings.add("Item 2");
list1Strings.add("Item 3");
list1Strings.add("Item 4");
lv.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, list1Strings));
依然如故,一次只能处理一行。