Как извлечь текст из выбранного элемента в listView - PullRequest
41 голосов
/ 09 февраля 2012

У меня есть список с некоторыми предметами. Я хотел бы получить текст из выбранного элемента.

Вот мой список адаптеров и onItemClickListener:

ListView lv = (ListView)findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<Country>(
            this,R.layout.list_black_text,R.id.list_content, values));


    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
??????
    }});
        }

Подскажите, пожалуйста, как получить строку из выбранного предмета.

метод ((TextView) view) .getText () не работает, у меня есть

ClassCastException: android.widget.LinearLayout

Я нашел решение, может быть, кому-то оно понадобится:

ListView lv = (ListView)findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<Country>(
            this,R.layout.list_black_text,R.id.list_content, values));

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            TextView textView = (TextView) view.findViewById(R.id.list_content);
            String text = textView.getText().toString(); 
            System.out.println("Choosen Country = : " + text);

    }});

Ответы [ 12 ]

62 голосов
/ 09 февраля 2012

Используйте это:

String selectedFromList = (lv.getItemAtPosition(position));

Надеюсь, это поможет.:)

14 голосов
/ 09 февраля 2012

Для этого нужно написать следующее:

lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        TextView textView = (TextView) view.findViewById(R.id.list_content);
        String text = lv.get(position).toString().trim();
        System.out.println("Chosen Country = : " + text);

}});
3 голосов
/ 01 сентября 2016

Здравствуйте, я использую CustomListView с зарегистрированным контекстным меню. В этом случае способ доступа к элементу внутри пользовательской строки списка будет:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.add:
                TextView textView = (TextView) info.targetView.findViewById(R.id.yourItem);
                String text = textView.getText().toString();
                Toast.makeText(getApplicationContext(), "Selected " + text, Toast.LENGTH_LONG).show(); 
        default:
                return super.onContextItemSelected(item);
    }
}

Где R.id.yourItem - текстовое представление внутри пользовательской строки

PS: Это мой первый пост, надеюсь, это поможет; -)

3 голосов
/ 12 февраля 2015

Другие ответы выглядят хорошо, но я подумал I'd wrap everything в один полный ответ.

Для этого есть multiple ways, и это также зависит от того, получаете ли вы текст simple listView или Custom ListView(with custom_list_item.xml).

Для простого ListView

lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        String text = lv.get(position).tostring().trim();//first method 
        final String text = ((TextView)view).getText();// second method
}});

Для пользовательского списка

lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        TextView textView = (TextView) view.findViewById(R.id.list_content);
//where list_content is the id of TextView in listview_item.xml

}});

Проблема с другими Ответы

@Android Killer string Приведение отсутствует.

@Rishi не дает подробных сведений об использовании R.id.list_content

2 голосов
/ 14 июня 2016

Это определенно работает! Надеюсь, вы удовлетворены!

ListView lv=(ListView)findViewById(R.id.listView1);

lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub
        String text = (String) lv.getItemAtPosition(arg2);
        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();

    }
});
2 голосов
/ 05 мая 2016

Вот для справки в будущем для любого, кто наткнулся на это.В моем случае у меня был собственный класс адаптера с типом как класс POJO, который у меня был.Кроме того, элементы, которые я хотел передать адаптеру и отобразить в моем ListView месте класса util.List.

Я успешно передал данные в ListView, но также хотел получить текст текущего

Например: данные, которые я передал, представляли собой список школ, в которых преподавал лектор, поэтому он должен был выбрать конкретную школу, с которой он хотел работать в то время, и затемвходя в систему, я хотел передать намерение новой Activity с текущей школой, которую выбрал лектор.

Таким образом, мой ListView onClick () :

private void loginSuccess() {
    progressDialog.dismiss();
    if (mySchoolsList.size() > 1) {
        schoolsListView = new ListView(MainActivity.this);
        schoolsArrayAdapter = new SchoolListAdapter(MainActivity.this, android.R.layout.simple_list_item_1, mySchoolsList);
        schoolsListView.setAdapter(schoolsArrayAdapter);

        dialog = new Dialog(MainActivity.this);
        dialog.setContentView(schoolsListView);
        dialog.setTitle("Welcome " + staff.getFullName());
        dialog.show();


        schoolsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //the .getName() is accessed from the School POJO class.
                String schoolName = schoolsArrayAdapter.getItem(position).getName();
                intent = new Intent(MainActivity.this, NavMainActivity.class);
                intent.putExtra("sentIntent", schoolName);
                startActivity(intent);
            }
        });

    } else {
        intent = new Intent(MainActivity.this, NavMainActivity.class);
        intent.putExtra("sentIntent", recieveName);
        startActivity(intent);
    }
}

Надеюсь, это когда-нибудь спасет кого-то, потому что все решения здесь не сработали для меня.Ура!

0 голосов
/ 02 апреля 2019

Это так просто

@Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            TextView text1 = (TextView) findViewById(R.id.Text1);
            TextView text2 = (TextView) findViewById(R.id.Text2);

            String txt_1 = ""+text1.getText().toString().trim();
            String txt_2 = ""+text2.getText().toString().trim();

           //Other_Related_Work

        }
    });
0 голосов
/ 17 февраля 2019
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> av,
                                View view, int position, long l) {
            String text = String.valueOf(myListView.getItemAtPosition(position));

            }
        }
    });
0 голосов
/ 15 августа 2018

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

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         Toast.makeText(getApplicationContext(),(String)parent.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
     }
});
0 голосов
/ 12 февраля 2017
public void onItemClick(**AdapterView**<?> parent, View view, 
                                            int position, long id) {

 }

См. AdapterView .....--- >>> класс

Нужно только сделать это:

  TextView selectedText=(TextView) parent.findViewById(R.id.textView2);

Смотрите ... выполучить TextView напрямую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...