2017-11-10 5 views
0

スイッチのこの位置が検索/フィルタ後のリストビューと一致しない場合、フィルタリング後にリストビューの実際の位置を取得する方法。リストビューと内容が一致していないと表示されます

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

switch (position) 

Array 2

But The Contents is Array 1

public class CariTroubleActivity extends AppCompatActivity implements 
AdapterView.OnItemClickListener { 
ListView listView; 
Intent intent; 
ArrayAdapter adapter; 
String[] daftar = {"1","2"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_cari_trouble); 

    listView = findViewById(R.id.cariTrouble); 
    adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_activated_1, daftar); 
    listView.setAdapter(adapter); 
    intent = new Intent(CariTroubleActivity.this, MasalahActivity.class); 
    listView.setOnItemClickListener(this); 

} 




@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_cari, menu); 
    final MenuItem item = menu.findItem(R.id.menuCari); 
    SearchView searchView = (SearchView)item.getActionView(); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String list) { 
      adapter.getFilter().filter(list); 
      return false; 
     } 
    }); 


    return super.onCreateOptionsMenu(menu); 
} 



@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 


    switch (position){ 

     case 0 : 

      intent.putExtra("Tit", "Error Code"); 
      intent.putExtra("text1","Title 1"); 
      intent.putExtra("text2","Error 1ccccc"); 
      startActivity(intent); 
      break; 
     case 1 : 

      intent.putExtra("Tit", "Error Code"); 
      intent.putExtra("text1","Title 2"); 
      intent.putExtra("text2","Error 2cccc"); 
      startActivity(intent); 
      break; 
     default: 
      break; 
    } 
} 
} 

リストビューは、フィルタリストビューの後に、コンテンツと一致していません。どのようにスイッチの位置でlistviewの位置を調整するのですか?あなたのリストがフィルタリングされた後

答えて

0

、あなたは直接最初の項目position==0

だから今、あなたのフィルタの最初のアイテムですので、あなたがBaseAdapterを上書きすることができ、(もうpositionを使用して処理するためのロジックを作成することはできません。そのリスト、または、あなたが基本的なアダプタを使用しているので、あなただけの別の方法でpositionを把握しようとすることができます:ここでは

String[] daftar = {"1","2"}; 

ので、テキスト"1"および"2"は、ListViewのコンテンツとして使用されます。そのリストは、であるandroid.R.layout.simple_list_item_activated_1を使用しています。

この方法で、あなただけの代わりにpositionTextView内容を読むことができます:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    String textDisplayedByCurrentItem = ((TextView) view).getText(); 

    if(textDisplayedByCurrentItem.equals(daftar[0]) { // or .equals("1") 
      intent.putExtra("Tit", "Error Code"); 
      intent.putExtra("text1","Title 1"); 
      intent.putExtra("text2","Error 1ccccc"); 
      startActivity(intent); 
    } else if (textDisplayedByCurrentItem.equals(daftar[1]) { // or .equals("2") 
      intent.putExtra("Tit", "Error Code"); 
      intent.putExtra("text1","Title 2"); 
      intent.putExtra("text2","Error 2cccc"); 
      startActivity(intent); 
    } 
} 
+0

その後、私は200個のデータ配列を持っている場合は? if-elseを使うと効率的ではないでしょうか? –

+0

textDisplayedByCurrentItemを数値に変換し、スイッチケースで使用することができます。Integer.parseInt(textDisplayedByCurrentItem); – W0rmH0le

+0

おかげです。私はそれを試してみる...ありがとう –

関連する問題