2017-04-24 70 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