App stürzt nach drücken der Back-Taste bei super.onCreate() ab

AnnaBauer21

AnnaBauer21

Neues Mitglied
2
Hallo liebe Leute,

ich hab ein kleines / großes Problem und weiß einfach nicht, wie ich dieses lösen kann! Ich habe ein Testprojekt erstellt, in dem ich den Fehler einfach darstellen kann.

Es geht um folgendes:
- Ich habe 2 Activities, eins mit einer Actionbar.
- In Activity 1 klicke ich in der ActionBar auf einen Button und es öffnet sich Activity 2 durch startActivityForResult()
Code:
Intent iIntent = new Intent(MainActivity.this, SelectFile.class);
iInten.putExtra("TEST1", "Teststring 1");
startActivityForResult(iIntent, 0);


- In Activity 2 klicke ich auf einen Button und ein Wert wird an Activity 1 zurückübergeben in onActivityResult() und zwei Framelayouts werden erstellt, denen je ein Fragment übergeben wird. (Der Gedanke soll sein das ich je nach dem was ich in meinen Optionen einstelle beliebig viele Fragmente gleichzeitig darstellen möchte)
Code:
@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// ----------//
		// SelectFile//
		// ----------//
		if (requestCode == 0) {
			if (resultCode == RESULT_OK) {
				createAbfrage();
				createStatistik();
			}
		}
	}

private void createAbfrage() {
		int ID = 1;

		FrameLayout frameLayout = new FrameLayout(this);
		frameLayout.setId(ID);
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 7);

		
		llFragmentContainer.addView(frameLayout, 0, layoutParams);

	
		FragmentManager fm = getSupportFragmentManager();
		FragmentTransaction transaction = fm.beginTransaction();
		Anzeige abfrageObj = new Anzeige();

		transaction.add(ID, abfrageObj, "fragment_one");
		transaction.commit();
		fm.executePendingTransactions();
	}



	private void createStatistik() {
		int ID = 2;

		FrameLayout frameLayout = new FrameLayout(this);
		frameLayout.setId(ID);
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 3);

		llFragmentContainer.addView(frameLayout, 1, layoutParams);

		

		StatistikInterface statistikObj = new StatistikInterface(true); 

		FragmentManager fm = getSupportFragmentManager();
		FragmentTransaction transaction = fm.beginTransaction();

		transaction.add(ID, statistikObj, "fragment_two");
		transaction.commit();
		fm.executePendingTransactions();
	}


- Nun Öffne ich Activity 2 erneut, hier ist es egal ob ich wieder den Button oder die Zurück-Taste drücke. In onCreate stürzt die App bei der super.onCreate Methode ab
Code:
@Override
	protected void onCreate(Bundle savedInstanceState) {
		//TODO HIER ENTSTEHT DER FHELER
		super.onCreate(savedInstanceState);

		setContentView(R.layout.main_activity_multiview);

	
		ActionBar actionBar = getActionBar();
		actionBar.setCustomView(R.layout.actionbar);
		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);

		TextView tvOeffnen = (TextView) actionBar.getCustomView().findViewById(R.id.tvMenuDateiOeffnen);
		tvOeffnen.setOnClickListener(this);
		tvMenuLektionWahl = (TextView) actionBar.getCustomView().findViewById(R.id.tvMenuLektionWahl);
		tvMenuLektionWahl.setOnClickListener(this);


		if (findViewById(R.id.llFragmentContainer) != null) {
			llFragmentContainer = (LinearLayout) findViewById(R.id.llFragmentContainer); 
		}
	}



Warum?
Ich verwende Eclipse und es heißt "Source not found" des Weiteren öffnet sich ein neues Register namens "ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line 2295

Ich hoffe ihr könnt mir helfen :confused2:

Liebe Grüße
Anna
 
logcat pls...
 
Hallo Jaiel,

das einzige was in Logcat steht ist folgendes:

Code:
03-09 07:03:06.104: D/dalvikvm(7909): newInstance failed: no <init>()
 
Ich habs hinbekommen!

Anscheinend konnte ich am Freitag nicht mehr so klar denken :rolleyes2:

Die Lösung war, in der Fragment-Klasse einen Konstruktor ohne Parameter mit Aufruf von super() zu implementieren.

Code:
[COLOR="Red"]
public StatistikInterface(){
	super();
}[/COLOR]

public StatistikInterface(boolean statistikUebersichtActiveStatus) {
	this.statistikUebersichtActiveStatus = statistikUebersichtActiveStatus;
}

Ich frage mich aber, nachdem ich einen Konstruktor mit einem Parameter verwende (wenn ich darin super() aufrufe funktioniert es auch nicht), warum ich den zweiten Konstruktor brauche? :confused2:

Viele Grüße
Anna
 
Das Fragment wird vom System je nach Lifecycle neu instantiiert. Ganz ohne dein zutun. Das passiert immer mit dem Default constructor. Wenn der nicht da ist knallt es.

Problem: In diesem Fall wird dein boolen Parameter auch nicht übergeben.
Besser ist es mit echte Fragment Arguments zu arbeiten. Hier wird es schön verdeutlicht:
Best practice for instantiating a new Android Fragment - Stack Overflow
 
  • Danke
Reaktionen: AnnaBauer21
Hallo deek,

Vielen Dank!
Jetzt habe ich das endlich mal verstanden :rolleyes2:

Liebe Grüße
Anna
 

Ähnliche Themen

M
Antworten
3
Aufrufe
168
moin
M
S
Antworten
8
Aufrufe
512
swa00
swa00
5
Antworten
22
Aufrufe
1.422
590239
5
Zurück
Oben Unten