Comment extraire le texte de l'élément sélectionné dans listView

J'ai un listview avec quelques éléments. Je voudrais obtenir le texte de l'élément sélectionné.

Voici mon adaptateur de liste et le 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) {
??????
    }});
        }

Pourriez-vous me dire comment obtenir la chaîne de l'élément sélectionné?

La méthode ((TextView) vue).getText() ne fonctionne pas, j'ai un

ClassCastException: android.widget.LinearLayout

, j'ai trouvé la solution, peut-être que quelqu'un en aura besoin:

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

    }});
36
demandé sur Miloš 2012-02-09 14:06:37

10 réponses

Utilisez ceci:

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

J'espère que cela aidera. :)

59
répondu Android Killer 2012-02-09 10:15:03

Pour cela, vous devez écrire ce qui suit:

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

}});
14
répondu Rishi 2016-01-14 18:36:50

Les autres réponses semblent bonnes, mais j'ai pensé I'd wrap everything en une réponse complète.

Il y a multiple ways pour y parvenir et cela dépend aussi si vous obtenez du texte de simple listView ou de Custom ListView(with custom_list_item.xml).

Pour La Simple 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
}});

Pour ListView Personnalisé

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

}});

Problème avec les autres Réponses

@Android Killer La Coulée de cordes est manquante.

@Rishi ne donne pas de détails sur L'utilisation de R. id. list_content

3
répondu Xar E Ahmer 2015-02-12 14:09:55

Voici pour référence future pour tous ceux qui trébuchent sur cela. Dans mon cas, j'avais une classe d'adaptateur personnalisée, avec le type comme classe POJO que j'avais. Aussi les éléments que je voulais passer à l'adaptateur et afficher dans mon ListView où de la classe util.List.

J'ai passé avec succès les données à ListView, mais je voulais aussi obtenir le texte de la liste actuellement sélectionnée.

Par exemple: les données que j'ai transmises étaient une liste d'écoles où un conférencier enseignait, alors il devait sélectionner l'école particulière qu'il je voulais travailler avec à ce moment - là, et en me connectant, je voulais passer une intention à un nouveau Activity avec l'école actuelle que le conférencier avait sélectionnée.

Ainsi mon 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);
    }
}

J'espère que cela sauvera quelqu'un un jour, parce que toutes les solutions ici n'ont pas fonctionné pour moi. À votre santé!

2
répondu Peterstev Uremgba 2016-05-05 15:45:28

Il sera définitivement fonctionne!Espoir vous Satisfait!

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
répondu SivaRamaKrishnan T 2016-06-14 14:04:28

Bonjour, j'utilise un CustomListView avec un Menu contextuel enregistré. Dans ce cas, le moyen d'accéder à un élément dans une ligne de liste personnalisée sera:

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

Où R. id. yourItem est le textView dans la ligne personnalisée

PS: c'est mon premier post, J'espère que ça aide ; -)

2
répondu Guille 2016-09-01 16:34:03

Si vous utilisez une liste pour remplir ListView dans votre méthode onItemClick ().

String s = list.get(position);

Vous devez pouvoir accéder à cette liste dans la classe interne

0
répondu Rajdeep Dua 2012-02-09 10:14:14

Essayez de le faire par ceci, insérez-le dans onItemClickListener, Je ne suis pas sûr à quoi ressemble votre classe de pays:

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);
0
répondu luciferche 2012-02-09 10:17:01
public void onItemClick(**AdapterView**<?> parent, View view, 
                                            int position, long id) {

 }

Voir le AdapterView.....--->>>la classe

Seulement besoin de faire ceci:

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

Voir...vous obtenez le TextView directement

0
répondu zhejunliu 2017-02-12 10:23:05

Essayez ce code:

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
répondu Hossam Ali 2018-08-15 19:03:14