2014-04-17 39 views
6

Ho appena iniziato ad apprendere la programmazione Android. Ho creato un nuovo progetto (API 19) con un'attività vuota e ha cercato di aggiungere un ImageView come questo: (in onCreate del MainActivity())Android aggiungi a livello di codice ImageView

setContentView(R.layout.activity_main); 
View view = (View) findViewById(R.layout.activity_main); 
LinearLayout picLL = new LinearLayout(MainActivity.this); 
picLL.layout(0, 0, 100, 100); 
picLL.setLayoutParams(new LayoutParams(100, 100)); 
picLL.setOrientation(LinearLayout.HORIZONTAL); 
((ViewGroup) view).addView(picLL); // <- This is line 36 
ImageView myImage = new ImageView(this); 
myImage.setImageResource(R.drawable.ic_launcher); 
picLL.addView(myImage); 

Tuttavia l'applicazione si blocca subito dopo il lancio. Ho provato numerose altre risposte da Stackoverflow, ma nessuna ha funzionato. Sembra che ci sia qualcosa che mi manca ...

Questa è l'uscita LogCat:

04-17 10:02:35.611: E/AndroidRuntime(1402): FATAL EXCEPTION: main 
04-17 10:02:35.611: E/AndroidRuntime(1402): Process: com.example.test, PID: 1402 
04-17 10:02:35.611: E/AndroidRuntime(1402): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.os.Looper.loop(Looper.java:136) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at dalvik.system.NativeStart.main(Native Method) 
04-17 10:02:35.611: E/AndroidRuntime(1402): Caused by: java.lang.NullPointerException 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at com.example.test.MainActivity.onCreate(MainActivity.java:36) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.Activity.performCreate(Activity.java:5231) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
04-17 10:02:35.611: E/AndroidRuntime(1402):  ... 11 more 
04-17 10:02:38.771: I/Process(1402): Sending signal. PID: 1402 SIG: 9 
+0

Qual è la 36a riga di MainActivity.java? – nKn

+0

(vista (ViewGroup)) .addView (picLL); – Atomix

+1

Ecco dov'è il tuo errore, restituisce un 'NullPointerException' perché stai aggiungendo un' View' a qualcosa che è 'null'. Invece, chiama il 'LinearLayout' root nel tuo' activity_main' in qualche modo, usa 'findViewById()' nel tuo metodo 'onCreate()' e usa '.addView()' al posto di 'ViewGroup' – nKn

risposta

11

Succede perché si sta cercando di trovare View con l'ID del layout.

View view = (View) findViewById(R.layout.activity_main); 

Sono disponibili due opzioni: È possibile aggiungere qualsiasi ID per l'elemento principale in activity_main.xml. Ad esempio sarà root_layout_id. Quindi puoi trovarlo come:

View view = (View) findViewById(R.id.root_layout_id); 

La seconda opzione è quella di creare un layout a livello di programma. Cambia il tuo metodo onCreate() in questo modo:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LinearLayout picLL = new LinearLayout(this); 
     picLL.layout(0, 0, 100, 100); 
     picLL.setLayoutParams(new LayoutParams(100, 100)); 
     picLL.setOrientation(LinearLayout.HORIZONTAL); 
     ImageView myImage = new ImageView(this); 
     myImage.setImageResource(R.drawable.ic_launcher); 
     picLL.addView(myImage); 
     setContentView(picLL); 
    } 
+0

Grazie, il secondo l'approccio ha funzionato per me! – Atomix

Problemi correlati