v7 searchview重叠问题

时间:2015-02-18 19:43:02

标签: java android searchview

我遇到了什么样的问题的例子。

假设我在列表视图中有6个元素,从左到右依次为[1,2,3,51,4,5]。

当我搜索5时,显示" 51"和" 5"。当我点击" 51"它打开了#34; 1"。问题是过滤后的列表与显示所有元素的列表视图重叠。我想知道如何解决这个问题。我正在使用v7.widget.SearchView

    @Override
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.recipe_menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.search_recipe).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            if (TextUtils.isEmpty(newText)) {
                lv.clearTextFilter();
            } else {
                lv.setFilterText(newText.toString());
            }
            return true;
        }
    });
    super.onCreateOptionsMenu(menu, inflater);
}

1 个答案:

答案 0 :(得分:1)

我认为你在onItemClick(AdapterView<?> parent, View view, int position, long id)方法中犯了错误。您从数据列表中按位置获取数据。 &#34;位置&#34;是列表中单击项的位置。因此,如果您过滤了列表并单击第一个项目,则位置值将为&#34; 1&#34;。您必须从适配器获取与点击位置相对应的值。您应该从适配器中获取项目,如下面的代码所示:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        ...

        String data = ((ExerciseDAO)parent.getAdapter().getItem(position)).getTitle() ;

        ...
    }
});

如果您有疑问 - 请问。