首页 > 解决方案 > Arrayadapter 和 SearchView

问题描述

真可惜……我正在尝试实现一个 SearView 来过滤 ListView,不幸的是,即使遵循简单的教程(是的,使用 S),我也从未达到我的目标。每次,我都会得到一个带有奇怪字符串的列表,而不是我所期望的。

这一次,我一次又一次地检查这个我的应用程序显示奇怪的列表视图:在此处输入图像描述

因此,由于这不是第一次,我想我在某个地方犯了一个错误,我请求您的帮助以一劳永逸地理解解决方案。

耻辱。去stackoverflow理解一个教程......

顺便说一句,谢谢你的帮助。

MainActivity.class

package com.soundbox.djbam.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


ArrayList<Spacecraft> spacecrafts = new ArrayList<>();
ArrayAdapter<Spacecraft> adapter;
ListView lv;
SearchView sv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //VIEW REFERENCES
    lv = findViewById(R.id.lv);
    sv = findViewById(R.id.sv);

    //POPULATE DATA
    fillData();

    //ADAPTER
    //final SoundAdapter adapter = new SoundAdapter(Sounds_Organisation.this, sounds);
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, spacecrafts);
    lv.setAdapter(adapter);

    //EVENTS
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //FILTER
            adapter.getFilter().filter(newText);

            return false;
        }
    });
}

private void fillData() {
    Spacecraft s = new Spacecraft("Voyager");
    spacecrafts.add(s);

    s = new Spacecraft("Rosetter");
    spacecrafts.add(s);
    s = new Spacecraft("Toucan");
    spacecrafts.add(s);
    s = new Spacecraft("Babouchka");
    spacecrafts.add(s);
    s = new Spacecraft("Biloute");
    spacecrafts.add(s);
    s = new Spacecraft("Test");
    spacecrafts.add(s);
}
}

Spacecraft.class 包 com.soundbox.djbam.myapplication;

public class Spacecraft {
String name;

public Spacecraft(String name) {
    this.name = name;
}

public String getName() {
    return name;
}
}

activity_main 布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <SearchView
        android:id="@+id/sv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </SearchView>

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>

</LinearLayout>


</android.support.constraint.ConstraintLayout>

标签: javalistviewfilteradaptersearchview

解决方案


推荐阅读