tôi gặp sự cố với các đoạn và màn hình xoay. Tôi đọc bài này, và nó đã không giải quyết vấn đề của tôi:Các mảnh vỡ và các vấn đề xoay màn hình
Fragment without a view crashes on configuration change (không phải là giống hệt nhau)
IllegalStateException when replacing a Fragment (không giải quyết vấn đề của tôi)
Tôi chỉ có một hoạt động:
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);
}
.....
}
Và mã của đoạn là:
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;
}
....
Và chỉ khi tôi thay đổi các tab, và sau khi tôi xoay điện thoại của tôi, tôi nhận được một FC và logcat là thế này:
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
Nhờ tất cả.
Cảm ơn, điều đó đã hiệu quả đối với tôi. Tôi đã có một yếu tố đang tải một WebViewFragment và nó đã được hoàn toàn hạt. Bằng cách thay đổi thành FrameLayout, nó hoạt động tốt :) –