Autore Topic: Problema nel lancio di un app con due activity.  (Letto 930 volte)

Offline Rampo

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Google+
    • PiRampo
    • Mostra profilo
  • Dispositivo Android:
    HTC One (Android 4.1.2 Stock)
  • Play Store ID:
    PiKo Technologies
  • Sistema operativo:
    Windows 7, Mac OS X Lion 10.8.3
Problema nel lancio di un app con due activity.
« il: 09 Novembre 2011, 23:37:54 CET »
0
Ciao ragazzi!
Sto lavorando ad un progetto in cui ci sono due activty:
MainActivity.java:
Codice (Java): [Seleziona]
package mieapplicazioni.subactivitydemo;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button) findViewById(R.id.button);;
    button.setText("Lancia SubActivity") ;
    button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v ) {
                        startSubActivity() ;
                }
        });
        setContentView(button);
}
private void startSubActivity() {
        Intent intent = new Intent(this, SubActivity.class);
        startActivity(intent);
}
}
in questa attività cerco di caricare un layout,caricare un widget, con questo button lanciare un altra activity(SubActivity.java),
il punto è che: se creo il button nel java in questo modo(vedi codice sotto) mi dà errore nel runtime prima di lanciare la app:
Codice: [Seleziona]
11-09 23:25:08.779: E/AndroidRuntime(20104): FATAL EXCEPTION: main
11-09 23:25:08.779: E/AndroidRuntime(20104): java.lang.RuntimeException: Unable to start activity ComponentInfo{mieapplicazioni.subactivitydemo/mieapplicazioni.subactivitydemo.MainActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.os.Handler.dispatchMessage(Handler.java:99)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.os.Looper.loop(Looper.java:123)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.ActivityThread.main(ActivityThread.java:4627)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at java.lang.reflect.Method.invokeNative(Native Method)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at java.lang.reflect.Method.invoke(Method.java:521)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at dalvik.system.NativeStart.main(Native Method)
11-09 23:25:08.779: E/AndroidRuntime(20104): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.view.ViewGroup.addViewInner(ViewGroup.java:1970)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.view.ViewGroup.addView(ViewGroup.java:1865)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.view.ViewGroup.addView(ViewGroup.java:1845)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:217)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.Activity.setContentView(Activity.java:1658)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at mieapplicazioni.subactivitydemo.MainActivity.onCreate(MainActivity.java:22)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-09 23:25:08.779: E/AndroidRuntime(20104):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-09 23:25:08.779: E/AndroidRuntime(20104):         ... 11 more
mentre se faccio così e creo il button invece di caricarlo:
Codice (Java): [Seleziona]
package mieapplicazioni.subactivitydemo;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = new Button (this);
        button.setText("Lancia SubActivity") ;
        button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v ) {
                        startSubActivity() ;
                }
        });
        setContentView(button);
}
private void startSubActivity() {
        Intent intent = new Intent(this, SubActivity.class);
        startActivity(intent);
}
}
non mi dà errore ma io devo per forza caricarlo dal xml.


Ecco il codice della seconda activity lanciata dalla prima
Codice (Java): [Seleziona]
package mieapplicazioni.subactivitydemo;

import android.app.Activity;
import android.os.Bundle;

public class SubActivity extends Activity {
@Override
protected void onCreate(Bundle savedIntanceState) {
        super.onCreate(savedIntanceState);
        setContentView(R.layout.layout2);

                }
        }

perchè? cosa devo fare? ( ho dichiarato le activity nel manifest)
« Ultima modifica: 09 Novembre 2011, 23:43:03 CET da Rampo »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema nel lancio di un app con due activity.
« Risposta #1 il: 10 Novembre 2011, 00:15:53 CET »
0
Se hai fatto

Codice (Java): [Seleziona]
setContentView(R.layout.main);
perchè dopo fai anche

Codice (Java): [Seleziona]
setContentView(button);
?