【问题标题】:implement search function to listview in fragments在片段中实现列表视图的搜索功能
【发布时间】:2015-09-03 13:58:30
【问题描述】:

我正在将从我创建的数据库中获取的一些值设置为列表视图。列表视图已正确填充。现在我想为我的列表视图实现搜索功能。我怎样才能做到这一点?我已经创建了搜索栏布局。我参考了很多教程,但无法完成。

我的班级

public class StockWatchView extends Fragment {

    private ListView mListView;
    private LazyListViewAdapter mAdapter;
    private EditText search;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.stock_watchlist_view, container, false);

        mListView = (ListView) view.findViewById(R.id.listview);
        search = (EditText) view.findViewById(R.id.search);


        Toast.makeText(StockWatchView.this.getActivity(), "Do Background Service", Toast.LENGTH_LONG).show();

        DBHandler dbHandler = new DBHandler(StockWatchView.this.getActivity(), null, null, 0);

        ArrayList<BaseElement> items = dbHandler.getAllPric();

        if (items.size() != 0) {
            mAdapter = new LazyListViewAdapter(items, StockWatchView.this.getActivity(), ListElement.PRICE_LIST.getPosition());

            mListView.setAdapter(mAdapter);

            Toast.makeText(this.getActivity(), "Toast " + dbHandler.getLastUpdateTime(), Toast.LENGTH_LONG).show();

        } else {


            //new BackgroundService().execute();


        }

        search.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {


            }
            // TODO Auto-generated method stub

        });
       return view;
    }
}

【问题讨论】:

  • 您可以简单地从在布局中添加一个文本视图和一个按钮开始。当您按下按钮时,应根据搜索键触发查询,您将获得一个光标作为结果。然后您可以使用该光标将结果填充到列表视图中

标签: android search android-fragments android-listview


【解决方案1】:

items ArrayList 设为公开。

然后通过查询数据库来获取所需的数据(搜索结果为类型ArrayList&lt;BaseElement&gt;),就像您在 OnTextChanged() 方法中所做的 dbHandler.getAllPric(); 一样,通过将可编辑文本作为参数传递。

在查询中,您将使用“like”短语来获取适当的数据。

例如,

items = dbHandler.getSearchResult(editableText);//editableText as String

adapter.notifyDataSetChanged();

希望这种方法对您有所帮助。

【讨论】:

    【解决方案2】:

    您必须声明一个文本观察器,例如::

                        TextWatcher mSearchTw = new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
    
                        }
    
                        @Override
                        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
    
                        }
    
                        @Override
                        public void afterTextChanged(Editable editable) {
                            //put length after which this would be called 
                            if (editable.length() > 2) {
                            //here you search in db 
                            // or the stuff you want to do in view
                            }
                        }
                    }
    `               editText.addTextChangedListener(mSearchTw);
    

    【讨论】:

    • 实现搜索功能是我的问题。我正在获取 ArrayList items = dbHandler.getAllPric(); 中项目的值
    • 您将不得不在 afterTextChange 中使用“可编辑”进行查询并再次加载列表视图适配器(notifyDatasetChanged)。
    猜你喜欢
    • 2016-01-31
    • 2017-05-19
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多