Member 13500443 Ответов: 0

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

Не могли бы вы показать мне, как создать пользовательский адаптер в этом случае? Как изменить мой код? Я надеюсь, что вы поймете для новичка. Спасибо за вашу помощь.

0 Ответов