2017-01-05 6 views
3

У меня есть список items, и я хочу начать различную деятельность на основе item, когда я нажимаю на него, открывается правильная активность, но когда я пытаюсь искать элементы списка из панели поиска, тогда он открывает неправильные действия.Реализовать поиск по строкам listview Android

listView = (ListView) findViewById(R.id.listView); 
    sv=(SearchView) findViewById(R.id.searchView1); 
    String[] values = new String[]{item1,item2,item3,item4,} 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_2, android.R.id.text1, values); 
    listView.setAdapter(adapter); 
    //linking from 1 item to other activity stars with if options// 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      if (position == 0) { 
       Intent myIntent = new Intent(view.getContext(), activity1.class); 
       startActivityForResult(myIntent,0); 
      } 

      if (position == 4) { 
       Intent myIntent = new Intent(view.getContext(), aactivity4.class); 
       startActivityForResult(myIntent,0); 

      } 
     } 
    }); 

    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
     @Override 
     public boolean onQueryTextChange(String text) { 
      adapter.getFilter().filter(text); 
      return false; 
     } 
    }); 

Я много не знаю о кодировании, но может ли один решить мою проблему ..

ответ

4

вы начинаете вашу деятельность на основе positionposition но будут изменены, когда вы делаете поиск, потому список будет сокращаться и positions изменится таким образом, чтобы получить данные, связанные с указанной позиции в списке используют getItemAtPosition

поэтому изменения условий на основе данных

if (parent.getItemAtPosition(position).equals("item1")) { 
       Intent myIntent = new Intent(view.getContext(), activity1.class); 
       startActivityForResult(myIntent,0); 
      } 

else if (parent.getItemAtPosition(position).equals("item2")) { // use any item value here you want 
       Intent myIntent = new Intent(view.getContext(), aactivity4.class); 
       startActivityForResult(myIntent,0); 
      } 

Примечание: Вы можете использовать switch, а вместо длинных if или else-if лестницы

например Вы три строки

item 1 position 0 
item 2 position 1 
item 3 position 2 

после поиска пункта 2 у вас есть два значения в списке близко к поиску

item 2 position 0 
item 3 position 1 

так положение изменится, так что не использовать его вместо того, чтобы использовать данные

код

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       Intent intent = null; 
       // global string to class 
       selectedValue = String.valueOf(parent.getItemAtPosition(position)); 

       if (selectedValue.equals("item1")) { 
             // ^^^ use any item value here you want 
        Intent myIntent = new Intent(view.getContext(), activity1.class); 
        startActivityForResult(myIntent,0); 
       } 

       else if (selectedValue.equals("item2")) { 
        Intent myIntent = new Intent(view.getContext(), aactivity4.class); 
        startActivityForResult(myIntent,0); 
       } 
      } 
     }); 
+0

Так ,, как я могу это сделать? –

+0

@WAQARALAM вам просто нужно заменить свой код 'if-else' моим, и добавить все случаи для всех элементов, попробуйте демонстрационную часть кода –

+0

ничего не меняет .., он все еще рассматривает позицию –