java - Android Searchview在使用ListView点击项目时过滤错误
问题描述
我尝试过其他解决方案。但问题对我来说是不同的。我在我的应用程序中实现了一个带有ListView的SearchView。当我搜索某些东西时,数组的第一项在 item click 上打开。但我需要打开搜索中列出的相同项目。搜索结果过滤得很好,但 onClick 项目给出了不同的项目。请注意,我的问题是不同的,而不是重复的。我的代码如下:
public class Searchpage extends AppCompatActivity {
SearchView searchView;
ListView listView;
ArrayAdapter<String> adapter;
String[] name = {
"General Science", "Social Science", "Maths", "English", "Politics", "IT"
};
String[] file= {
"science.pdf", "social.pdf", "maths.pdf", "english.pdf", "politics.pdf", it.pdf"
};
int[] pagenum = {
0,0,0,0,0,0
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchpage);
searchView = findViewById(R.id.srch);
listView = findViewById(R.id.searchlist);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, name);
listView.setAdapter(adapter);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
adapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent ij = new Intent(getApplicationContext(), PdfView.class);
ij.putExtra("furl", "fl/" + pagenum[position]);
ij.putExtra("pagenm", pagenum[position]);
startActivity(ij);
}
});
}
}
解决方案
首先使用ArrayList
而不是array
初始化ArrayAdapter
ArrayList<String> name = new ArrayList<>(Arrays.asList(
"General Science", "Social Science", "Maths", "English", "Politics", "IT"
));
然后使用下面的代码找出position
过滤数据的正确性
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int actualPosition = name.indexOf(adapter.getItem(position));
Intent ij = new Intent(getApplicationContext(), PdfView.class);
ij.putExtra("furl", "fl/" + file[actualPosition]);
ij.putExtra("pagenm", pagenum[actualPosition]);
startActivity(ij);
}
推荐阅读
- android - 在 jetpack compose 中制作自定义网格
- javascript - 不要通过 XMLHttpRequest POST 获取我的数据
- python - 如何在python中创建一个自写的静态函数库
- android - 如何全局检测设备是否处于手势导航状态?
- react-native - 在 React Native 上使用 Share.shareSingle
- c# - c# 新闻文章标题的组合框
- python - 将 pyvis 图形导出为矢量或 .png 图像。有办法吗?
- loopback - 排序相关字段环回4 - postgres
- wordpress - 用辅助 WordPress 替换主菜单
- python - Python3 ThreadingHTTPServer 无法发送分块编码响应