2012-02-14 5 views
135

Recibo un error al intentar configurar mi vista para mostrar ListView para el archivo que quiero mostrar (archivo de texto). Estoy bastante seguro de que tiene algo que ver con el xml. Solo quiero mostrar la información de this.file = fileop.ReadFileAsList("Installed_packages.txt");. Mi código:"ArrayAdapter requiere que el ID del recurso sea un TextView" xml problems

public class Main extends Activity { 
    private TextView tv; 
    private FileOperations fileop; 
    private String[] file; 

    /** Called when the activity is first created. */  
    @Override 
    public void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState); 
     this.fileop = new FileOperations(); 
     this.file = fileop.ReadFileAsList("Installed_packages.txt"); 
     setContentView(R.layout.main); 
     tv = (TextView) findViewById(R.id.TextView01); 
     ListView lv = new ListView(this); 
     lv.setTextFilterEnabled(true); 
     lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, this.file)); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

       public void onItemClick(AdapterView<?> parent, View view,  int position, long id) { 
        // When clicked, show a toast with the TextView text 
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
       } 
     });   
     setContentView(lv); 
    } 

} 

list_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:padding="10dp" 
    android:textSize="16sp" 
    android:textColor="#000"> 

</LinearLayout> 

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="1"> 
<ScrollView 
    android:id="@+id/SCROLLER_ID" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:scrollbars="vertical" 
    android:fillViewport="true"> 
     <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="5sp" 
     android:id="@+id/TextView01" 
     android:text="@string/hello"/> 
    </ScrollView> 

</LinearLayout> 

Respuesta

354

El ArrayAdapter requiere el ID de recurso a ser un TextView XML excepción significa que no proporciona lo que el ArrayAdapter espera. Cuando se utiliza este constructor:

new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file) 

R.Layout.a_layout_file debe ser el ID de un archivo de diseño xml que contiene sólo un TextView (! El TextViewno se puede envolver por otro diseño, como un LinearLayout, RelativeLayout etc), algo como esto:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    // other attributes of the TextView 
/> 

Si usted quiere que su diseño de lista del registro sea algo un poco diferente, entonces un simple widget de TextView utilizar este constructor:

new ArrayAdapter<String>(this, R.layout.a_layout_file, 
    R.id.the_id_of_a_textview_from_the_layout, this.file) 

donde usted indica el id de un diseño que puede contener varios puntos de vista, sino también necesidad contiene un TextView con y id (el tercer parámetro) que se pasa a su ArrayAdapter para que pueda saber dónde poner el Strings en el diseño de la fila.

+1

tenía el mismo problema porque mi TextView estaba dentro de un LinearLayout en el xml archivo. –

+0

Intenté esto en un menú desplegable de autocompletar que tenía pero no permitía el desplazamiento ni me permitía seleccionar ningún elemento de la lista – kabuto178

+17

TextView ** puede ** incluirse en otro diseño (lo acabo de hacer). Para hacer eso use otro constructor 'nuevo ArrayAdapter (esto, R.layout.a_layout_file, R.id.a_text_view_within_layout, this.file)' Ver javadoc para 'android.widget.ArrayAdapter' –

23

soution está aquí

listitem.xml

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

    <TextView 
     android:id="@+id/textview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </TextView> 
</LinearLayout> 

Java:

String[] countryArray = {"India", "Pakistan", "USA", "UK"}; 
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.listitem,R.id.textview, countryArray); 
ListView listView = (ListView) findViewById(R.id.listview); 
listView.setAdapter(adapter); 
+0

Sé que esto parece que debería ser un No hay dudas, pero mirar la documentación de los constructores ArrayAdapter también me ayudó. [enlace] (http://developer.android.com/reference/android/widget/ArrayAdapter.html) – luckyging3r

Cuestiones relacionadas