我的代码有问题..试图在Android的列表视图中添加搜索功能..它以某种方式工作,但是当我搜索时,它给了我其他活动,而不是真正的结果..就像在我的列表视图中,如果我搜索销售,即显示结果的第五项活动,但是当我单击以打开活动时,它将打开Sani活动,即列表中的第一项活动...
这是活动Java代码
package com.example.bati;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
public class MainActivity extends Activity {
ListView lv;
SearchView sv;
String[] teams = {"Sani", "Bali", "Sati", "Umam", "sale"};
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teams);
lv.setAdapter(adapter);
sv.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
Intent myIntent = new Intent(view.getContext(), Sani.class);
startActivityForResult(myIntent, 0);
}
if (position == 1) {
Intent myIntent = new Intent(view.getContext(), Bali.class);
startActivityForResult(myIntent, 1);
}
if (position == 2) {
Intent myIntent = new Intent(view.getContext(), Sati.class);
startActivityForResult(myIntent, 2);
}
}
});
}
}
最佳答案
当您过滤适配器并通知结果项目的位置更改时,您不能将位置用作打开活动的标识符。您的搜索数据发生变化,但是您始终单击位置0,因此总是打开Sani活动。
在这里,我修改了您的代码:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final String item = (String)parent.getItemAtPosition(position);
if ("Sani".equals(item)) {
Intent myIntent = new Intent(view.getContext(), Sani.class);
startActivityForResult(myIntent, 0);
}
if ("Bali".eqauls(item)) {
Intent myIntent = new Intent(view.getContext(), Bali.class);
startActivityForResult(myIntent, 1);
}
if ("Sati".equals(item)) {
Intent myIntent = new Intent(view.getContext(), Sati.class);
startActivityForResult(myIntent, 2);
}
}
});
我想这会帮到你。