2012-06-03 36 views
12

agrego un ListView en tiempo de ejecución de la siguiente manera:android.widget.LinearLayout no se puede convertir a android.widget.TextView

 MainMenue = getResources().getStringArray(R.array.Unit); 
    // remove all controls 
    LinearLayout formLayout = (LinearLayout)findViewById(R.id.submenue); 
    formLayout.removeAllViews(); 
    menueview = new ListView(getApplicationContext());    
    menueview.setVisibility(ListView.VISIBLE); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
    params.gravity = Gravity.RIGHT; 
    menueview.setLayoutParams(params); 
    menueview.setAdapter(new submenueadapter(menueview.getContext(), MainMenue)); 
    // Set the on Item 
    SetMenueOnClick() ; 
    formLayout.addView(menueview); 

y luego agrego un elemento detector de clics de esta manera:

public void SetMenueOnClick() { 
    menueview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       final String text = (String) ((TextView)view).getText(); 
      } 
    }); 
} 

Pero luego tengo un error:

06-03 10:59:25.862: E/AndroidRuntime(14732): at android.view.ViewRoot.handleMessage(ViewRoot.java:2109) 
android.widget.LinearLayout cannot be cast to android.widget.TextView 

en esta línea:

final String text = (String) ((TextView)view).getText(); 

¿Alguna idea de cómo obtener el texto en esta edición? el adaptador tiene el siguiente aspecto:

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.shortmenue, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.contents); 

    textView.setText(values[position]); 

    // Change icon based on name 
    String s = values[position]; 

    System.out.println(s); 

    rowView.setBackgroundResource(R.drawable.alternate_list_color); 
    return rowView; 
} 

y R.layout.shortmenue es simple, sólo TextView, como a continuación:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

       <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/contents" 
       android:textSize="34dp" 

       /> 

</LinearLayout> 

Respuesta

16

Su fila es un TextView envuelto por un LinearLayout lo que podría querer hacer esto:

LinearLayout ll = (LinearLayout) view; // get the parent layout view 
TextView tv = (TextView) ll.findViewById(R.id.contents); // get the child text view 
final String text = tv.getText().toString(); 
9

Si está ejecutando un problema similar, pero seguro que se ha centrado en un LineLayout:

Borrar el archivo gen/your.app.package/R.java.

Esto ocurre debido a un error xml, cuando eliminas R.java se volverá a crear en la siguiente compilación/ejecución.

+0

¡Funcionó! Lo suficientemente estúpido: p –

+2

O simplemente intente presionar el botón REBUILD –

1

Acabo de agregar android: id = "@ + id/my_layout" a LinearLayout que envolvió TextView y eso resolvió un problema similar.

+0

Curiosamente, esto también solucionó mi problema list_item.xml, donde tenía varios elementos, pero no se configuró ningún identificador para el LinearLayout que los contenía. De alguna manera, Android no puede distinguirlo de una Vista normal, probablemente porque no tiene el tipo R.layout sin la identificación, por lo que intenta lanzarlo y falla. –

0

Tuve el mismo problema y acabo de renombrar el objeto de vista insertado.

De esta manera:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/newTextViewName" 
    android:textSize="34dp" 
/> 
0

En mi caso un XML contenía una TextView, pero he cometido un error escribir

final TextView text = (TextView) inflater.inflate(R.layout.item_text, layout); 

en lugar de

final TextView text = (TextView) inflater.inflate(R.layout.item_text, layout, false); 
0

Puede resolver esto mediante la reemplazando

final String text = (String) ((TextView)view).getText(); 

con

TextView temp= (TextView) view.findViewById(R.id.textView); 

Esto funciona para mí.

Cuestiones relacionadas