【问题标题】:I want to add searchview to my listview我想将搜索视图添加到我的列表视图
【发布时间】:2015-10-29 19:29:43
【问题描述】:

我想在 MainActivity.java 中将搜索视图添加到我的列表视图中,如何?

activity_main.xml

<RelativeLayout `xmlns:android="http://schemas.android.com/apk/res/android"`
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity">

<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/searchView1"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:queryHint="search"/>

<ListView
android:id="@+id/listview"
android:layout_below="@+id/searchView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>

MainActivity.java

public class MainActivity extends ListActivity {
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // 1. pass context and data to the custom adapter
        MyAdapter adapter = new MyAdapter(this, generateData());
        //2. setListAdapter
        setListAdapter(adapter);
    }
    private ArrayList < Item > generateData() {
        ArrayList < Item > items = new ArrayList < Item > ();
        items.add(new Item("item1", "description1"));
        items.add(new Item("item2", "description2"));
        items.add(new Item("item3", "description3"));
        return items;
    }@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu); //Menu Resource, Menu
        return true;
    }
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.about:
                Intent intent = new Intent(this, about.class);
                startActivity(intent);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

    标签: java android listview search


    【解决方案1】:

    使用 ListViewSearchView 创建 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">
        <SearchView
                android:id="@+id/search_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        <ListView
                android:id="@+id/list_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
    
    </LinearLayout>
    

    创建以下 Java 类为 SearchViewFilterMode.java

    import android.app.Activity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.Window;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.SearchView;
    
    /**
     * Shows a list that can be filtered in-place with a SearchView in non-iconified mode.
     */
    public class SearchViewFilterMode extends Activity implements SearchView.OnQueryTextListener {
    
        private SearchView mSearchView;
        private ListView mListView;
    
        private final String[] mStrings = Cheeses.sCheeseStrings;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    
            setContentView(R.layout.searchview_filter);
    
            mSearchView = (SearchView) findViewById(R.id.search_view);
            mListView = (ListView) findViewById(R.id.list_view);
            mListView.setAdapter(new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,
                    mStrings));
            mListView.setTextFilterEnabled(true);
            setupSearchView();
        }
    
        private void setupSearchView() {
            mSearchView.setIconifiedByDefault(false);
            mSearchView.setOnQueryTextListener(this);
            mSearchView.setSubmitButtonEnabled(true); 
            mSearchView.setQueryHint("Search Here");
        }
    
        public boolean onQueryTextChange(String newText) {
            if (TextUtils.isEmpty(newText)) {
                mListView.clearTextFilter();
            } else {
                mListView.setFilterText(newText.toString());
            }
            return true;
        }
    
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
    }
    

    【讨论】:

    • MainActivity.java 怎么样?
    • @abood250 将此 SearchViewFilterMode 用作主要活动
    • 不,我想把它添加到我上面的 MainActivity.java 中!!
    • 如果我在 id=searchbox 的 activity_main.xml 中添加 EditText 过滤器会怎样?
    • @abood250 改名字就行了?尝试对代码进行一些更改,而不是寻找所有现成的东西
    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多