web-dev-qa-db-fra.com

"ArrayAdapter nécessite que l'ID de la ressource soit un TextView". Problèmes XML

Je reçois une erreur lorsque j'essaie de configurer mon affichage pour afficher la variable ListView du fichier que je souhaite afficher (fichier texte). Je suis sûr que cela a quelque chose à voir avec le XML. Je veux juste afficher les informations de this.file = fileop.ReadFileAsList("Installed_packages.txt");. Mon code:

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>
162
PeterL

ArrayAdapter requiert que l'ID de ressource soit une exception TextView XML, ce qui signifie que vous ne fournissez pas ce que la variable ArrayAdapter attend. Lorsque vous utilisez ce constructeur:

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

R.Layout.a_layout_file doit être l'id d'un fichier de présentation XML contenant uniquement une TextView (la TextView ne peut pas être entourée par une autre présentation, comme une LinearLayout, RelativeLayout etc!), quelque chose comme ceci:

<?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 vous souhaitez que la disposition de vos lignes de liste soit quelque peu différente, un simple widget TextView utilise ce constructeur:

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

où vous fournissez la id d'une disposition pouvant contenir différentes vues, mais aussi must contenant une TextView avec et id (le troisième paramètre) que vous transmettez à votre ArrayAdapter pour qu'il sache où placer la Strings disposition.

391
Luksprog

La solution est là

listitem.xml

<?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>

Code 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);
28
sandeepmaaram

Si vous recevez ce message lorsque vous étendez un ArrayAdapter, vous obtenez cette erreur car vous n'avez pas fourni l'ID de ressource correct pour afficher l'élément. Appelez la super classe du constructeur et transmettez l'ID de la ressource TextView:

    //Pass in the resource id:  R.id.text_view
    SpinnerAdapter spinnerAddToListAdapter = new SpinnerAdapter(MyActivity.this,
            R.id.text_view,
            new ArrayList<>());

Adaptateur:

public class SpinnerAdapter extends ArrayAdapter<MyEntity> {

    private Context context;
    private List<MyEntity> values;

    public SpinnerAdapter(Context context, int textViewResourceId,
                          List<MyEntity> values) {

        //Pass in the resource id:  R.id.text_view
        super(context, textViewResourceId, values);

        this.context = context;
        this.values = values;
    }
0
live-love