Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 搜索的项目在单击时给了我错误的结果_Java_Android - Fatal编程技术网

Java 搜索的项目在单击时给了我错误的结果

Java 搜索的项目在单击时给了我错误的结果,java,android,Java,Android,我有一个中国、美国、加拿大和日本的列表,在操作栏上有一个搜索栏。一切都很好,但当我点击搜索的项目,它给了我一个错误的结果。例如,如果我搜索加拿大,我会看到加拿大的结果,但当我单击它时,它会显示中国的详细信息。单击后如何才能获得正确的结果? 以下是屏幕截图和代码:- package com.example.search; 导入androidx.appcompat.app.appcompat活动; 导入androidx.appcompat.widget.SearchView; 导入androidx

我有一个中国、美国、加拿大和日本的列表,在操作栏上有一个搜索栏。一切都很好,但当我点击搜索的项目,它给了我一个错误的结果。例如,如果我搜索加拿大,我会看到加拿大的结果,但当我单击它时,它会显示中国的详细信息。单击后如何才能获得正确的结果? 以下是屏幕截图和代码:-

package com.example.search;
导入androidx.appcompat.app.appcompat活动;
导入androidx.appcompat.widget.SearchView;
导入androidx.appcompat.widget.Toolbar;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类MainActivity扩展了AppCompatActivity{
列表视图列表视图;
字符串[]名称列表=
{
“中国”,
“美国”,
“加拿大”,
“日本”,
};
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
listView=(listView)findViewById(R.id.list);
adapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,nameList);
setAdapter(适配器);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
如果(位置==0){
Intent intent0=新Intent(getBaseContext(),China.class);
起始触觉(intent0);
}
如果(位置==1){
Intent intent1=新的Intent(getBaseContext(),USA.class);
星触觉(intent1);
}
如果(位置==2){
Intent intent2=新的Intent(getBaseContext(),Canada.class);
星触觉(intent2);
}
如果(位置==3){
Intent intent3=新的Intent(getBaseContext(),Japan.class);
起始触觉(intent3);
}
{
}
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.toolbar\u search\u菜单,菜单);
MenuItem MenuItem=menu.findItem(R.id.action\u search);
SearchView SearchView=(SearchView)menuItem.getActionView();
setQueryHint(“在这里搜索!”);
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回true;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
MainActivity.this.adapter.getFilter().filter(newText);
返回false;
}
});
返回super.onCreateOptions菜单(菜单);
}
}

我看到在你的mclick方法中,你开始了与职位相关的不同活动,但你的代码只适用于你的原始项目列表,即{“中国”、“美国”、“加拿大”、“日本”}

所以,应用过滤器后会发生什么,适配器中的列表会更新,项目定位也会更新。在用户搜索“Canada”后,按照您的示例,adapter中的列表将更新为{“Canada”}。现在,正如你所看到的,在位置0处,我们有了“加拿大”,而不是“中国”

结论:在进行过滤时,我们永远不能依赖项目的位置,因为它们可能会发生变化。但我们可以做的是从适配器获取该位置的当前项并匹配其数据

在这里,您可以用以下代码替换listView.setOnItemClickListener

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        
            String country = (listView.getItemAtPosition(position));
     
            if (country.equals("China"))  {
                Intent intent0 = new Intent(getBaseContext(), China.class);
                startActivity(intent0);
            }
            if (country.equals("USA"))  {
                Intent intent1 = new Intent(getBaseContext(), USA.class);
                startActivity(intent1);
            }
            if (country.equals("Canada"))  {
                Intent intent2 = new Intent(getBaseContext(), Canada.class);
                startActivity(intent2);
            }
            if (country.equals("Japan"))  {
                Intent intent3 = new Intent(getBaseContext(), Japan.class);
                startActivity(intent3);
            }
   }
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
字符串country=(listView.getItemAtPosition(position));
if(国家等于(“中国”)){
Intent intent0=新Intent(getBaseContext(),China.class);
起始触觉(intent0);
}
如果(国家等于(“美国”)){
Intent intent1=新的Intent(getBaseContext(),USA.class);
星触觉(intent1);
}
如果(国家等于(“加拿大”)){
Intent intent2=新的Intent(getBaseContext(),Canada.class);
星触觉(intent2);
}
if(国家等于(“日本”)){
Intent intent3=新的Intent(getBaseContext(),Japan.class);
起始触觉(intent3);
}
}
});

我看到在你的mclick方法中,你开始了与职位相关的不同活动,但你的代码只适用于你的原始项目列表,即{“中国”、“美国”、“加拿大”、“日本”}

所以,应用过滤器后会发生什么,适配器中的列表会更新,项目定位也会更新。在用户搜索“Canada”后,按照您的示例,adapter中的列表将更新为{“Canada”}。现在,正如你所看到的,在位置0处,我们有了“加拿大”,而不是“中国”

结论:在进行过滤时,我们永远不能依赖项目的位置,因为它们可能会发生变化。但我们可以做的是从适配器获取该位置的当前项并匹配其数据

在这里,您可以用以下代码替换listView.setOnItemClickListener

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        
            String country = (listView.getItemAtPosition(position));
     
            if (country.equals("China"))  {
                Intent intent0 = new Intent(getBaseContext(), China.class);
                startActivity(intent0);
            }
            if (country.equals("USA"))  {
                Intent intent1 = new Intent(getBaseContext(), USA.class);
                startActivity(intent1);
            }
            if (country.equals("Canada"))  {
                Intent intent2 = new Intent(getBaseContext(), Canada.class);
                startActivity(intent2);
            }
            if (country.equals("Japan"))  {
                Intent intent3 = new Intent(getBaseContext(), Japan.class);
                startActivity(intent3);
            }
   }
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共网络连接(AdapterView a)