Подтвердить что ты не робот

Как извлечь текст из выбранного элемента в listView

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

Вот мой адаптер списка и 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)).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);

    }});
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Другие ответы выглядят хорошо, но я подумал 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
}});

Для Custom ListView

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 строка Литье отсутствует.

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

Ответ 4

Здравствуйте, я использую 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 - это textView внутри настраиваемого Row

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

Ответ 5

Здесь для будущих ссылок для тех, кто наткнулся на это. В моем случае у меня был пользовательский класс адаптера с типом как класс 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);
    }
}

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

Ответ 6

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

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();

    }
});

Ответ 7

Если вы используете List для заполнения ListView в вашем методе onItemClick().

String s = list.get(position);

Вам нужно иметь доступ к этому списку внутри внутреннего класса

Ответ 8

попробуйте сделать это, вставьте его в onItemClickListener, я не уверен, как выглядит ваш класс Country:

String s = values.get(position).getCountryName();
Log.e("LISTVIEW", "selected item text = "+s);

  or

String s = values.get(position).toString();
Log.e("LISTVIEW", "selected item text = "+s);

Ответ 9

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

 }

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

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

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

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

Ответ 10

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

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();
     }
});

Ответ 11

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> av,
                                View view, int position, long l) {
            String text = String.valueOf(myListView.getItemAtPosition(position));

            }
        }
    });

Ответ 12

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

@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

        }
    });