我的代码有问题..试图在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);
                }
            }
        });


我想这会帮到你。

10-07 19:47
查看更多