webentwicklung-frage-antwort-db.com.de

"ArrayAdapter erfordert, dass die Ressourcen-ID ein TextView-XML-Problem ist

Beim Versuch, meine Ansicht so einzustellen, dass die ListView für die anzuzeigende Datei (Textdatei) angezeigt wird, wird eine Fehlermeldung angezeigt. Ich bin mir ziemlich sicher, dass es etwas mit der XML zu tun hat. Ich möchte nur die Informationen von this.file = fileop.ReadFileAsList("Installed_packages.txt"); anzeigen. Mein 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

Der ArrayAdapter erfordert, dass die Ressourcen-ID eine TextView-XML -Ausnahme ist, wenn Sie nicht das angeben, was ArrayAdapter erwartet. Wenn Sie diesen Konstruktor verwenden:

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

R.Layout.a_layout_file muss die ID einer XML-Layoutdatei sein, die nur ein TextView enthält (das TextViewkann nicht kann von einem anderen Layout umschlossen werden, wie z. B. einem LinearLayout, RelativeLayout etc!), etwa wie folgt:

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

Wenn Sie möchten, dass Ihr Listenzeilenlayout etwas anders ist, verwenden Sie ein einfaches TextView-Widget mit diesem Konstruktor:

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

geben Sie hier das id eines Layouts an, das verschiedene Ansichten enthalten kann, aber auch must ein TextView mit und id (den dritten Parameter), die Sie an Ihr ArrayAdapter übergeben, damit es wissen kann, wo das Strings eingefügt werden soll das Zeilenlayout.

391
Luksprog

Die Lösung ist da

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>

Java-Code:  

 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

Wenn Sie diese Meldung erhalten, wenn Sie einen ArrayAdapter erweitern, wird diese Fehlermeldung angezeigt, weil Sie nicht die richtige Ressourcen-ID angegeben haben, um das Element anzuzeigen. Rufen Sie die Superklasse im Konstruktor auf und übergeben Sie die Ressourcen-ID der TextView:

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

Adapter:

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