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

发布于 2024-12-07 09:17:38 字数 2915 浏览 0 评论 0原文

我想创建一个像 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>

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

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,但是当我尝试启动它时,程序崩溃了。我也知道搜索界面的存在,但我只是想看看这个特殊的方法是否有效。

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

提前致谢

I wanted to create a search view like the one Google uses. For this I created the following XML layout, which basically is a search bar and a button in the upper section of the screen and a ListView at the bottom of it.

<?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>

And this is the code of the textViewResource that the ArrayAdapter demands on its constructor:

<?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>

Now, this is the code of the activity. So far, I just want to display the view with the contents (that's why I'm using a static String array for now).

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();
            }
          });   
    }
}

However, when I run the activity I see the search bar but it doesn't display the ListView.

I've tried changing the extension of SearchActivity to ListActivity, but the program just crashes when I try to start it. I'm also aware of the existence of the Search Interface, but I just want to see this particular method work.

Why it doesn't display the contents of the ListView? Is there a way to fix this?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

调妓 2024-12-14 09:17:38

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

If you are going to use ListActivity you should be aware that ListActivity already has a ListView instance. You need to call its setListAdapter method to set the adapter for its ListView instead of instantiating your own ListView and setting the adapter on it. You can call getListView to get a handle on ListActvity's ListView and then set the click listener on that.

好多鱼好多余 2024-12-14 09:17:38

如果你想扩展ListActivity,那么你必须有一个ID为@android:id/list的ListView。更改 ListView 的 id,这应该可以修复扩展 ListActivity 时的崩溃问题。

If you want to extend ListActivity then you must have a ListView with id @android:id/list. Change the id of your ListView, that should fix the crash when extending ListActivity.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文