Как получить позицию выбранного элемента в представлении списка и сохранить его в переменной

#java #android #listview

#java #Android #listview

Вопрос:

Поэтому я создал этот список из 5-6 элементов. Я настроил метод OnItemClickListener. Я хочу получить позицию щелкнутого списка. Например, если на первом номере я должен получить соответствующую позицию и сохранить ее в переменной. Если я нажму на номер два, я должен получить соответствующую позицию и так далее. Я новичок, поэтому, пожалуйста, объясните.

     final ListView listView = (ListView) findViewById(R.id.listView);
    ArrayList<String> abcd = new ArrayList<>();
    abcd.add("Number One");
    abcd.add("Number Two");
    abcd.add("Number Three");
    abcd.add("Number Four");
    abcd.add("Number Five");
    abcd.add("Number Six")
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.list_view);
    listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        int position = listView.getItemIdAtPosition(position);
        Toast.makeText(MainActivity.this, "Clicked" position , Toast.LENGTH_SHORT).show();
    }
});
 

Комментарии:

1. i это позиция выбранного элемента. Просто прочитайте документацию по методу, и вы бы знали

2. int i — это позиция , поэтому произнесите свой тост следующим образом Toast.makeText(MainActivity.this, "Clicked" i ,Toast.LENGTH_SHORT).show();

3. onItemClick… {Строковый элемент = abcd.get(позиция);

4. Я попробовал это только сейчас, и приложение продолжало сбоить, не знаю почему. есть какие-нибудь идеи?

Ответ №1:

Поместите список в качестве частного поля;

    private List<String> abcd = new ArrayList<>();
 

и в вашей логике:

    final ListView listView = (ListView) findViewById(R.id.listView);

    abcd.add("Number One");
    abcd.add("Number Two");
    abcd.add("Number Three");
    abcd.add("Number Four");
    abcd.add("Number Five");
    abcd.add("Number Six")
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.list_view);
    listView.setAdapter(adapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
       String selectedElement = abcd.get(i);
    }
});
 

selectedElement будет вашим элементом, который вы можете сохранить

Ответ №2:

Я бы попробовал это:

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3)
        {
            String selectedFromList =(String) (listview.getItemAtPosition(position).toString());
            Log.d("Selected: ",  selectedFromList);
        }
    });
 

Ответ №3:

Попробуйте это:

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view, int pos, long id) {
        String item = abcd.get(pos);
        Toast.makeText(this, "Item: "   item   " At Position: "   pos, Toast.LENGTH_SHORT).show();
    }
});