App va in crash all'avvio Grazie Alla java.lang.UnsupportedOperationException: addView (View, LayoutParams) non è supportato in AdapterView
-
15-10-2019 - |
Domanda
La mia app si blocca ogni volta che inizio nell'emulatore. Ecco l'logcat:
01-02 17:20:58.859: ERROR/AndroidRuntime(249): Uncaught handler: thread main exiting due to uncaught exception
01-02 17:20:58.889: ERROR/AndroidRuntime(249): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shoppinglist/com.shoppinglist.ShoppingList}: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.app.ActivityThread.access$2100(ActivityThread.java:116)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.os.Looper.loop(Looper.java:123)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at android.app.ActivityThread.main(ActivityThread.java:4203)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at java.lang.reflect.Method.invokeNative(Native Method)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at java.lang.reflect.Method.invoke(Method.java:521)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
01-02 17:20:58.889: ERROR/AndroidRuntime(249): at dalvik.system.NativeStart.main(Native Method)**
Ecco il mio file java:
package com.shoppinglist;
import android.app.ListActivity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ShoppingList extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1main = (Button) findViewById(R.id.Button01main);
button1main.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(ShoppingList.this);
dialog.setContentView(R.layout.maindialog);
dialog.setCancelable(true);
Button button = (Button) dialog.findViewById(R.id.cancel);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
});
}
}
Il mio layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFCC00"
android:padding="10dp"
android:id="@+id/listview">
<Button
android:id="@+id/Button01main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add item..."/>
</ListView>
La mia finestra 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:id="@+id/layout_root"
android:orientation="vertical"
android:background="#FFFFFF"
android:minHeight="100dp"
android:minWidth="300dp">
<EditText
android:id="@+id/edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Type the name of an item here...">
</EditText>
<LinearLayout
android:id="@+id/button_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_gravity="right">
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
android:layout_gravity="bottom">
</Button>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel"
android:layout_gravity="bottom">
</Button>
</LinearLayout>
</LinearLayout>
Qualsiasi aiuto sarà apprezzato. Ho bisogno di esempi di codice per le correzioni, io non sono molto esperto.
Soluzione
Nel layout xml, si sta cercando di aggiungere un pulsante all'interno di un ListView. Il ListView è un AdapterView, come dice l'errore, quindi deve essere popolato da un adattatore, che fornisce un elenco di 'cose' simili - questi potrebbero essere una lista di stringhe (da una lista di array) o un elenco di visualizzazioni personalizzate, che si creano, ma sono tutti sostanzialmente lo stesso tipo di cosa - non puoi, per esempio, aggiunge un pulsante, poi ad un altro aggiungere una stringa. Creare un adattatore per fornire le cose che volete nella vostra ListView.