Android Неправильная фильтрация поискового запроса при щелчке элемента с ListView - PullRequest
1 голос
/ 22 января 2020

Я пробовал другие решения. Но проблема для меня в другом. Я реализовал SearchView с ListView в моем приложении. Когда я что-то ищу, открывается первый элемент массива , при нажатии элемента . Но мне нужно открыть тот же элемент, который указан в поиске. Результат поиска хорошо фильтруется, но элемент onClick дает другой элемент. Пожалуйста, обратите внимание, что мой вопрос отличается и не дубликат. Мой код ниже:


public class Searchpage extends AppCompatActivity {
    SearchView searchView;
    ListView listView;
    ArrayAdapter<String> adapter;


    String[] name = {
           "General Science", "Social Science", "Maths", "English", "Politics", "IT"
  };
    String[] file= {
           "science.pdf", "social.pdf", "maths.pdf", "english.pdf", "politics.pdf", it.pdf"
    };
    int[] pagenum = {
            0,0,0,0,0,0
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_searchpage);
        searchView = findViewById(R.id.srch);
        listView = findViewById(R.id.searchlist);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, name);
        listView.setAdapter(adapter);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                adapter.getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                adapter.getFilter().filter(newText);
                return false;
            }
        });
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent ij = new Intent(getApplicationContext(), PdfView.class);
                ij.putExtra("furl", "fl/" + pagenum[position]);
                ij.putExtra("pagenm", pagenum[position]);
                startActivity(ij);
            }
        });
    }


}

1 Ответ

1 голос
/ 22 января 2020

Прежде всего используйте ArrayList вместо array для инициализации ArrayAdapter

ArrayList<String> name = new ArrayList<>(Arrays.asList(
        "General Science", "Social Science", "Maths", "English", "Politics", "IT"
));

Затем используйте приведенный ниже код, чтобы узнать правильный position ваших отфильтрованных данных

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

    int actualPosition = name.indexOf(adapter.getItem(position));

    Intent ij = new Intent(getApplicationContext(), PdfView.class);
    ij.putExtra("furl", "fl/" + file[actualPosition]);
    ij.putExtra("pagenm", pagenum[actualPosition]);
    startActivity(ij);
}
...