2017-04-24 109 views
1

我的代码有问题..我试图添加一个搜索功能到我的列表视图在Android ..它是以某种方式工作,但是当我搜索它给了我其他活动不是真正的结果..喜欢在我的列表视图,如果我搜索销售即5日活动它显示的结果,但是当我点击打开活动打开它撒尼活性,即列表中的第一个活动...Android的Listview搜索功能

下面是活动的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); 
       } 
      } 
     }); 
    } 
} 

回答

1

当您过滤适配器并通知结果您的项目的位置发生变化时,您不能使用位置作为标识符来打开活动。您的搜索数据发生变化,但您始终点击位置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); 
       } 
      } 
     }); 

我认为这会帮助你的。

+0

谢谢兄弟,它的工作原理 – Elpedia

+0

不客气如果你接受和upvote我的答案会很高兴。谢谢。 – savepopulation

0

ListViewonItemClick中给予您的位置是ListView中当前可见项目顶部的已点击项目的位置。由于列表视图被过滤,位置可能不等于teams数组中的项目位置。

您可以从适配器本身获取该位置的物品。以下代码将适用于您。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     String item = adapter.getItem(position); 
     switch (item) { 
      case "Sani": 
       startActivityForResult(new Intent(view.getContext(), Sani.class), 0); 
       return; 
      case "Bali": 
       startActivityForResult(new Intent(view.getContext(), Bali.class), 1); 
       return; 
      case "Sati": 
       startActivityForResult(new Intent(view.getContext(), Sati.class), 2); 
       return; 
     } 
    } 
}); 
+0

他们都工作..谢谢大家 – Elpedia