显示常规Activity Android中定义的ListView内容

时间:2011-09-30 23:39:47

标签: android android-layout android-activity android-listview

我想创建一个类似Google使用的搜索视图。为此我创建了以下XML布局,它基本上是一个搜索栏和一个位于屏幕上半部分的按钮和一个位于其底部的ListView。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayoutSearch"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:background="#FF394952">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" >
        <EditText android:layout_height="wrap_content" android:id="@+id/searchTextBar" android:layout_width="wrap_content" android:layout_weight="1">
            <requestFocus></requestFocus>
        </EditText>
        <Button android:layout_height="fill_parent" android:layout_width="wrap_content" android:id="@+id/searchButton" android:text="Buscar"></Button>
    </LinearLayout>

    <ListView 
        android:id="@+id/searchResultList"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_weight="1.0" />

</LinearLayout>

这是ArrayAdapter对其构造函数所要求的textViewResource的代码:

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

现在,这是活动的代码。到目前为止,我只想显示带有内容的视图(这就是我现在使用静态String数组的原因)。

public class SearchActivity extends Activity{

    static final String[] COUNTRIES = new String[] {
        "Afghanistan", "Albania", "Algeria"};


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

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item, COUNTRIES);
        ListView lv = (ListView)this.findViewById(R.id.searchResultList);
        lv.setAdapter(adapter);
        lv.setTextFilterEnabled(true);

          lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
              // When clicked, show a toast with the TextView text
              Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                  Toast.LENGTH_SHORT).show();
            }
          });   
    }
}

但是,当我运行活动时,我看到了搜索栏,但它没有显示ListView。

我已经尝试将SearchActivity的扩展名更改为ListActivity,但是当我尝试启动它时程序崩溃了。我也知道Search Interface的存在,但我只想看到这种特殊的方法。

为什么它不显示ListView的内容?有办法解决这个问题吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您要使用ListActivity,您应该知道ListActivity已经有一个ListView实例。您需要调用其setListAdapter方法为其ListView设置适配器,而不是实例化您自己的ListView并在其上设置适配器。您可以调用getListView来获取ListActvity的ListView上的句柄,然后在其上设置单击侦听器。

答案 1 :(得分:0)

如果要扩展ListActivity,则必须拥有ID为@android:id/list的ListView。更改ListView的ID,该ID应在扩展ListActivity时修复崩溃。