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


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

148
2018-02-14 16:59


Ursprung


Antworten:


Das ArrayAdapter benötigt die Ressourcen-ID als TextView-XML Ausnahme bedeutet, dass Sie nicht liefern, 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 einen enthält TextView(das TextView  kippen von einem anderen Layout, wie einem LinearLayout, RelativeLayout usw.!), etwas in der Art:

<?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 anderes ist als ein einfaches TextView Widget benutze diesen Konstruktor:

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

wo liefern Sie die id eines Layouts, das verschiedene Ansichten enthalten kann, aber auch Muss enthält a TextView mit und id(der dritte Parameter), den Sie an Ihre übergeben ArrayAdapter so kann es wissen, wo man das setzt Strings im Zeilenlayout.


377
2018-02-14 18:16



Soution ist hier

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

26
2018-01-26 16:34



Wenn Sie diese Nachricht erhalten, wenn Sie einen ArrayAdapter erweitern, erhalten Sie diesen Fehler, weil Sie nicht die richtige Ressourcen-ID zum Anzeigen des Elements angegeben haben. 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
2018-04-11 19:19