2012-02-09 25 views
34

Tengo una vista de lista con algunos elementos. Me gustaría obtener el texto del elemento seleccionado.Cómo extraer el texto del elemento seleccionado en la listaVer

Aquí es mi adaptador lista y el 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) { 
?????? 
    }}); 
     } 

Podría decirme por favor, cómo obtener la cadena desde el elemento seleccionado.

el método ((TextView) Vista) .getText() no funciona, tengo un

ClassCastException: android.widget.LinearLayout 

he encontrado la solución, tal vez alguien lo necesitará:

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

    }}); 

Respuesta

55

Utilice esta:

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

esperan que ayude. :)

+1

¡Respuesta fácil y simple! =) –

+2

Si solo tiene que poner cadenas en su adaptador, entonces no debería tener problemas para hacer lo anterior, simplemente moldee como una cadena para evitar cualquier error. String alloy = (String) lv.getItemAtPosition (position); – ColossalChris

+0

necesita .toString()? –

0

Si está utilizando una lista para llenar el ListView en su método onItemClick().

String s = list.get(position); 

Necesita ser capaz de acceder a esta lista dentro de la clase interna

+0

Unfortunetly, estoy usando una consulta de base de datos para poblar mi lista. He encontrado la solución y he editado la pregunta. –

0

trata de hacerlo por esto, insertarlo en onItemClickListener, no estoy seguro de lo que hace su mirada de clase país como:

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

Para ello, tiene que escribir lo siguiente:

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

Las otras respuestas se ven bien, pero pensé I'd wrap everything hasta en una respuesta completa.

Hay multiple ways para lograr esto y también depende de si usted está recibiendo texto de simple listView o desde Custom ListView(with custom_list_item.xml).

Para ListView simple

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

para personalizados 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 

}}); 

Problema con los demás Respuestas

@Android Killer string No se encuentra.

@Rishi no da detalles sobre el uso de R.id.list_content

+0

¿por qué es "get" en rojo? – LUKER

+0

@LUKER necesita usar 'lv.getItemAtPosition (position)' en su lugar – Max

1

Aquí su para futura referencia para cualquier persona que se topa con esto. En mi caso tenía una clase de adaptador personalizado, con el tipo de clase POJO que tenía. También los artículos que quería pasar al adaptador y mostrar en mi ListView donde de la clase util.List.

Pasé con éxito los datos a ListView, pero también quería obtener el texto de la selección actual.

Ej: los datos que pasó fue una lista de escuelas que un profesor enseña en, por lo que tuvo que seleccionar la escuela en particular que quería trabajar con el en ese momento, y la tala en que quería pasar un intento a un nuevo Activity con la escuela actual que el profesor había seleccionado.

Por lo tanto mi 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); 
    } 
} 

Hope esto ahorra a alguien algún día, porque todas las soluciones aquí no funcionó para mí. ¡Aclamaciones!

2

Definitivamente funciona! Espero que estés satisfecho!

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

Hola estoy usando un CustomListView con el menú contextual registrado. En este caso, la forma de acceder a un elemento dentro de una fila lista personalizada será:

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

Dónde R.id.yourItem es el TextView dentro de la fila a medida

PD: Es mi primer post, espero que ;-) ayuda a

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

} 

Véase el AdapterView .....--- >>> la clase

Sólo necesita hacer esto:

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

Ver ... se obtiene la TextView directamente

+0

y esto puede usarse en el Fragmento – zhejunliu

+1

¡Bienvenido a Stack Overflow! Si bien es posible que haya resuelto el problema de este usuario, las respuestas de solo código no son muy útiles para los usuarios que se hacen cargo de esta pregunta en el futuro. Por favor, edite su respuesta para explicar por qué su código resuelve el problema original. –

Cuestiones relacionadas