2017-04-24 10 views
1

私のコードに問題があります。アンドロイドのリストビューに検索機能を追加しようとしています。何とか動作していますが、検索すると、実際の結果ではない他のアクティビティがありました。私のリストビューで、私は第五の活動、すなわち、販売のために検索した場合、それは結果を示しているが、私はそれは、リスト上の最初の活動、すなわち、サニアクティビティを開き、活動を開くためにクリックしたときに...ここで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

ListViewの位置がonItemClickにあるのは、現在表示されている項目の上からクリックした項目の位置です。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