Listview результат поиска onclick неправильный возврат
когда я нажимаю элемент списка из результата поиска, возвращаюсь в позицию 0. Как мне получить исходное положение из строки?
***string.xml***
<resources> <string name="app_name">SearchViewList <string-array name="array_country"> <item>Australia <item>Japan <item>China <item>India <item>Myanmar, 123
***menu_search***
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menuSearch" android:title="search" android:icon="@android:drawable/ic_menu_search" app:actionViewClass="android.widget.SearchView" app:showAsAction="always" >
Что я уже пробовал:
***основная деятельность****
public class MainActivity extends AppCompatActivity { ArrayAdapter<string>adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ListView listView = (ListView)findViewById(R.id.listView); final ArrayList<string>arrayCountry = new ArrayList<>(); arrayCountry.addAll(Arrays.asList(getResources().getStringArray(R.array.array_country))); adapter= new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, arrayCountry); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { String a = (String) adapterView.getAdapter().getItem(position); switch(position){ case 0: startActivity(new Intent(MainActivity.this, ActivityAustralia.class)); break; case 1: startActivity(new Intent(MainActivity.this, ActivityJapan.class)); break; case 2: startActivity(new Intent(MainActivity.this, ActivityChina.class)); break; } } }); listView.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(final Menu menu) { MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.menu_search,menu); MenuItem item= menu.findItem(R.id.menuSearch); final SearchView searchView=(SearchView)item.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return true; } @Override public boolean onQueryTextChange(String query) { adapter.getFilter().filter(query); return true; } }); return super.onCreateOptionsMenu(menu); } }
David Crow
Помимо всех синтаксических ошибок, с вашей текущей реализацией вы не можете получить исходное положение элемента в адаптере, потому что содержимое адаптера изменилось.
Одна вещь, которую вы можете попробовать, это включить a
вместо position
.
Другой идеей было бы создать пользовательский адаптер, где вы могли бы сохранить исходный список элементов. Проблема с этим подходом заключается в том, что при выборе страны в отфильтрованном списке вам придется искать исходный список, чтобы получить его позицию. Поэтому я думаю, что на самом деле вас интересует не столько позиция, сколько само название страны (чтобы вы могли начать соответствующую деятельность).
Member 13500443
Не могли бы вы показать мне, как создать пользовательский адаптер в этом случае? Как изменить мой код? Я надеюсь, что вы поймете для новичка. Спасибо за вашу помощь.