Ich habe ein Problem mit Fragmenten und rotierenden Bildschirm. Ich lese diese Themen, und es hat mein Problem nicht lösen:Fragmente und rotierende Bildschirm Probleme
Fragment without a view crashes on configuration change (ist nicht genau das gleiche)
IllegalStateException when replacing a Fragment (nicht mein Problem lösen)
Ich habe nur eine Aktivität:
public class MainActivity extends FragmentActivity implements TabSelectedListener {
/** Application tab menu */
private TopMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menu = (TopMenu) this.findViewById(R.id.menu);
menu.setListener(this);
}//onCreate
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}
public void tabSelected(int tab) {
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment f = null;
boolean logged = DataController.getInstance().getLogged();
switch(tab){
case TopMenu.TAB1:
if(!logged){
f = new HomeFragment();
}else{
f = new AccountsFragment();
}
break;
case TopMenu.TAB2:
// i create more fragments depending the tab
}
if(f != null){
// Replace whatever is in the fragment view with this fragment,
// and add the transaction to the back stack
fragmentTransaction.replace(R.id.fragment, f);
fragmentTransaction.addToBackStack(null);
// Commit the transaction
fragmentTransaction.commit();
}
}//tabSelected
public void setSelectedTab(int tab){
menu.setSelectedTab(tab);
}
.....
}
Und der Code des Fragments:
public class HomeFragment extends Fragment implements OnClickListener{
private static final String KEY_STATE_BUNDLE = "HomeFragmentManagerState";
private LocalActivityManager mLocalActivityManager;
View homeRelative;
View homeLocked;
View homeUnlocked;
EditText id;
Button ok;
ImageView lock;
CheckBox remember;
private boolean lock_state;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle state = null;
if (savedInstanceState != null) {
state = savedInstanceState.getBundle(KEY_STATE_BUNDLE);
lock_state=savedInstanceState.getBoolean("lock_state");
} else {
lock_state=true;
}
mLocalActivityManager = new LocalActivityManager(getActivity(), true);
mLocalActivityManager.dispatchCreate(state);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
homeRelative = view.findViewById(R.id.home_relative);
homeLocked = view.findViewById(R.id.ly_home_buttonlogin);
homeLocked.setOnClickListener(this);
homeUnlocked = view.findViewById(R.id.ly_home_buttonlogin_unlocked);
id = (EditText) view.findViewById(R.id.userid);
ok = (Button) view.findViewById(R.id.useridok);
ok.setEnabled(false); // ?? if id.equalsIgnoreCase("")
ok.setOnClickListener(this);
lock = (ImageView) view.findViewById(R.id.iv_home_candado);
lock.setOnClickListener(this);
if (!lock_state)
animateLogon(true);
remember = (CheckBox) view.findViewById(R.id.remember);
id.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
ok.setEnabled(!id.getText().toString().equalsIgnoreCase(""));
id.setBackgroundResource(R.drawable.bordercolorblack_rightsquare);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
return view;
}
....
Und nur, wenn ich das Register zu wechseln, und nachdem ich mein Gerät drehen, bekomme ich einen FC und die logcat ist dies:
10-01 14:04:07.561: E/AndroidRuntime(11759): FATAL EXCEPTION: main
10-01 14:04:07.561: E/AndroidRuntime(11759): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.stkaction.sov/com.stkaction.sov.MainActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3362)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread.access$700(ActivityThread.java:127)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1162)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.os.Looper.loop(Looper.java:137)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread.main(ActivityThread.java:4511)
10-01 14:04:07.561: E/AndroidRuntime(11759): at java.lang.reflect.Method.invokeNative(Native Method)
10-01 14:04:07.561: E/AndroidRuntime(11759): at java.lang.reflect.Method.invoke(Method.java:511)
10-01 14:04:07.561: E/AndroidRuntime(11759): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:986)
10-01 14:04:07.561: E/AndroidRuntime(11759): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753)
10-01 14:04:07.561: E/AndroidRuntime(11759): at dalvik.system.NativeStart.main(Native Method)
10-01 14:04:07.561: E/AndroidRuntime(11759): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
10-01 14:04:07.561: E/AndroidRuntime(11759): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:272)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.Activity.setContentView(Activity.java:1835)
10-01 14:04:07.561: E/AndroidRuntime(11759): at com.stkaction.sov.MainActivity.onCreate(MainActivity.java:29)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.Activity.performCreate(Activity.java:4470)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
10-01 14:04:07.561: E/AndroidRuntime(11759): ... 12 more
10-01 14:04:07.561: E/AndroidRuntime(11759): Caused by: java.lang.IllegalStateException: Fragment com.com.stkaction.sov.HomeFragment did not create a view.
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:293)
10-01 14:04:07.561: E/AndroidRuntime(11759): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
10-01 14:04:07.561: E/AndroidRuntime(11759): ... 22 more
Vielen Dank an alle.
Danke, das hat für mich funktioniert. Ich hatte ein Element, das ein WebViewFragment geladen wurde und es wurde völlig verrückt. Durch den Wechsel zu FrameLayout funktionierte es großartig :) –