用於學習目的我正在製作應用程序..當我按下屏幕上的任何按鈕之前更改我的方向時,它成功更改方向並顯示我添加到「layout-land 「文件夾...應用程序崩潰作爲方向更改
但是,當我按下按鈕,顯示下fragement,然後切換方向。我期待的活動重新啓動,但我的應用程序崩潰......在這裏,我需要幫助..
調試劑量不顯示任何例外拋出線
MainActivity類
package com.example.prototype;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import com.example.prototype.fragments.FragmentOne;
public class MainActivity extends FragmentActivity {
int fragShowButtonPressed =0;
boolean FragOneDisplayed=false;
boolean FragTwoDisplayed=false;
public void fragment_switch(View v){
Button showfrag1 = (Button)findViewById(R.id.buttonShowFrag1);
Button showfrag2 = (Button)findViewById(R.id.buttonShowFrag2);
showfrag1.setVisibility(showfrag1.INVISIBLE);
showfrag2.setVisibility(showfrag2.INVISIBLE);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
switch(v.getId()){
case(R.id.buttonShowFrag1): ft.replace(R.id.frameLayout1, new FragmentOne("frag_1"), null); fragShowButtonPressed=1; FragOneDisplayed=true; FragTwoDisplayed=false; break;
case(R.id.buttonShowFrag2): ft.replace(R.id.frameLayout1, new FragmentOne("frag_2"), null); fragShowButtonPressed=1; FragOneDisplayed=false; FragTwoDisplayed=true; break;
}
ft.addToBackStack(null);
ft.commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("create", "Entered Oncreate");
setContentView(R.layout.activity_main);
if(savedInstanceState != null){
if(savedInstanceState.getInt("frag_button_pressed_stat")==1)
{
Button showfrag1 = (Button)findViewById(R.id.buttonShowFrag1);
Button showfrag2 = (Button)findViewById(R.id.buttonShowFrag2);
showfrag1.setVisibility(showfrag1.INVISIBLE);
showfrag2.setVisibility(showfrag2.INVISIBLE);
FragOneDisplayed=savedInstanceState.getBoolean("frag_one_display_stat");
FragTwoDisplayed=savedInstanceState.getBoolean("frag_two_display_stat");
}
else{}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
if(fragShowButtonPressed ==1)
{
outState.putInt("frag_button_pressed_stat", fragShowButtonPressed);
outState.putBoolean("frag_one_display_stat", FragOneDisplayed);
outState.putBoolean("frag_two_display_stat", FragTwoDisplayed);
}
super.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
FragmentOne類
package com.example.prototype.fragments;
import com.example.prototype.R;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentOne extends Fragment {
int id;
Context context;
public FragmentOne(String frag_name){
if(frag_name=="frag_1")
{
id=R.layout.frag_1;
}
else if(frag_name == "frag_2"){
id=R.layout.frag_2;
}
else{}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
context = inflater.getContext();
View v=inflater.inflate(id, container, false);
return v;
}
}
請注意,當我做出不同的片段班每個空的構造,並直接提供INT XML資源膨脹()函數問題解決
Taimoor Ali,Thankyou
LOG CAT
07-09 23:35:45.387: E/AndroidRuntime(948): FATAL EXCEPTION: main
07-09 23:35:45.387: E/AndroidRuntime(948): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prototype/com.example.prototype.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.prototype.fragments.FragmentOne: make sure class name exists, is public, and has an empty constructor that is public
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3809)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread.access$700(ActivityThread.java:139)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.os.Looper.loop(Looper.java:156)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread.main(ActivityThread.java:4987)
07-09 23:35:45.387: E/AndroidRuntime(948): at java.lang.reflect.Method.invokeNative(Native Method)
07-09 23:35:45.387: E/AndroidRuntime(948): at java.lang.reflect.Method.invoke(Method.java:511)
07-09 23:35:45.387: E/AndroidRuntime(948): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-09 23:35:45.387: E/AndroidRuntime(948): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-09 23:35:45.387: E/AndroidRuntime(948): at dalvik.system.NativeStart.main(Native Method)
07-09 23:35:45.387: E/AndroidRuntime(948): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.prototype.fragments.FragmentOne: make sure class name exists, is public, and has an empty constructor that is public
07-09 23:35:45.387: E/AndroidRuntime(948): at android.support.v4.app.Fragment.instantiate(Fragment.java:405)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1767)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:208)
07-09 23:35:45.387: E/AndroidRuntime(948): at com.example.prototype.MainActivity.onCreate(MainActivity.java:44)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.Activity.performCreate(Activity.java:4538)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
07-09 23:35:45.387: E/AndroidRuntime(948): ... 12 more
07-09 23:35:45.387: E/AndroidRuntime(948): Caused by: java.lang.InstantiationException: can't instantiate class com.example.prototype.fragments.FragmentOne; no empty constructor
07-09 23:35:45.387: E/AndroidRuntime(948): at java.lang.Class.newInstanceImpl(Native Method)
07-09 23:35:45.387: E/AndroidRuntime(948): at java.lang.Class.newInstance(Class.java:1319)
07-09 23:35:45.387: E/AndroidRuntime(948): at android.support.v4.app.Fragment.instantiate(Fragment.java:394)
07-09 23:35:45.387: E/AndroidRuntime(948): ... 19 more
任何替代方案因爲5個XML佈局,我不能做5個不同的片段類,必須有一種方法將它們組合在一個類中@Emil Adz –
查看更新的答案。 –
@TaimoorAli,我之前只發布了相同的確切代碼。它沒有幫助你? –