这是我的PreferenceActivity(我主要活动的内部课程)
public static class TestSettings extends PreferenceActivity implements Preference.OnPreferenceClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
getPreferenceManager().findPreference("key").setOnPreferenceClickListener(this);
}
Run Code Online (Sandbox Code Playgroud)
这是我的onPreferenceClick:
@Override
public boolean onPreferenceClick(Preference preference) {
FragmentClass fc = new FragmentClass();
fc.show(fm, "TAG");
return false;
}
Run Code Online (Sandbox Code Playgroud)
这是我的FragmentClass(TimePicker对话框):
public class FragmentClass extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new TimePickerDialog(getActivity(), this, 15, 00, false);
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Log.i("APP", "hour: "+hourOfDay+", …Run Code Online (Sandbox Code Playgroud) 我在处理活动方向时面临非常奇怪的问题.让我解释一下这个场景
我有活动A和B.当前A处于横向模式,B(固定)处于纵向模式.如果用户改变A的方向,我正在保存活动状态A.我从A(风景)到B(肖像),所以在那种情况下A在背景中,所以它应该调用onSaveInstance(bundle)方法.但它调用,当我回来时,然后A调用Resume()调用,我得到异常onResume()无法在onSaveInstance()之后调用A.
这是件事,让我讨厌.
更新编辑
如果两个活动都可以有任何方向.然后活动A onSaveInstance(bundle)在去B时没有调用,而且运行良好
谷歌地图v2 android第一次加载,然后我切换到其他片段,当我回来映射片段它崩溃.我已经附加下面的代码:我真的很感激任何帮助.谢谢你提前.
fragmentMain中地图的代码:
public class FragmentMain extends Fragment {
TextView textView;
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng test = new LatLng(53.551, 9.993);
private GoogleMap map;
public FragmentMain() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, null);
map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
.title("Hamburg"));
Marker test = map.addMarker(new MarkerOptions()
.position(test)
.title("test")
.snippet("test")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher)));
// Move the camera instantly to hamburg with a zoom of …Run Code Online (Sandbox Code Playgroud) android google-maps android-fragments google-maps-android-api-2
我试图取代fragment的onActivityResult(),但它总是给我的错误java.lang.illegalStateException.
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
12-29 18:50:21.455 5554-5554/com.package E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1377)
12-29 18:50:21.455 5554-5554/com.package E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1395)
12-29 18:50:21.455 5554-5554/com.package E/AndroidRuntime: at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:637)
12-29 18:50:21.455 5554-5554/com.package E/AndroidRuntime: at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:616)
12-29 18:50:21.455 5554-5554/com.package E/AndroidRuntime: at .virtualClass.VirtualPurchaseFragment.dealWithSuccessfulPurchase(VirtualPurchaseFragment.java:161)
Run Code Online (Sandbox Code Playgroud)
这是我的onActivityResult代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = new VirtualListFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
}
Run Code Online (Sandbox Code Playgroud) 如果我尝试在onNewIntent方法中切换导航选项卡,我的FragmentActivity(singleTop)会给我IllegalStateException.
更具体地说,我的应用程序使用带有三个选项卡的SherlockActionBar,一个选项卡在收到推送通知时更新(并且调用intent),如果应用程序在另一个选项卡上暂停,当我收到意图时(在onNewIntent中)我更改使用bar.setSelectedNavigationItem()将选项卡(以及片段)添加到第三个选项卡,这导致了我的问题.如果应用程序在第三个选项卡上暂停,则不会发生异常.
码:
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle bundle = intent.getExtras();
if (bundle != null) {
bar.setSelectedNavigationItem(Utils.ORDER_STATUS_TAB_ID);
} else {
}
}
Run Code Online (Sandbox Code Playgroud)
推送通知意图:
Intent notificationIntent = new Intent(context,
MainActivity.class);
notificationIntent.putExtra("orderUpdate",
new Gson().toJson(orderUpdate));
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
notification.contentIntent = contentIntent;
Run Code Online (Sandbox Code Playgroud)
TabListener方法(在堆栈跟踪中的第56行注释)
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft = activity.getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
if (mFragment == null) {
mFragment = Fragment
.instantiate(activity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, tag);
ft.commit();
} else {
ft.attach(mFragment); …Run Code Online (Sandbox Code Playgroud) 使用Share Intent应用程序崩溃时出现以下错误
01-25 12:16:09.270: E/AndroidRuntime(28699): FATAL EXCEPTION: main
01-25 12:16:09.270: E/AndroidRuntime(28699): java.lang.NullPointerException
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
01-25 12:16:09.270: E/AndroidRuntime(28699): at com.actionbarsherlock.app.SherlockFragmentActivity.onSaveInstanceState(SherlockFragmentActivity.java:127)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.Activity.performSaveInstanceState(Activity.java:1113)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1188)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2805)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2863)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.ActivityThread.access$900(ActivityThread.java:127)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1173)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.os.Looper.loop(Looper.java:137)
01-25 12:16:09.270: E/AndroidRuntime(28699): at android.app.ActivityThread.main(ActivityThread.java:4507)
01-25 12:16:09.270: E/AndroidRuntime(28699): …Run Code Online (Sandbox Code Playgroud) 对于我当前正在编写的应用程序,我已经实现了一个导航抽屉(具有向后兼容性的默认 Android 方式)。因此,从导航抽屉中选择一个菜单元素,然后我执行此操作(对于测试,addPreviousToBackStack 始终为 false):
private void replaceFragment(final Fragment fragment, final boolean addPreviousToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.activity_main_fragment_container, fragment);
if(addPreviousToBackStack) {
fragmentTransaction.addToBackStack(fragment.getTag());
}
fragmentTransaction.commit();
currentFragment = fragment;
}
Run Code Online (Sandbox Code Playgroud)
所以当我启动应用程序时,这就像一个魅力。然后我使用后退按钮关闭应用程序。如果我随后重新打开应用程序(无论如何:通过长按主页按钮或通过快捷方式),应用程序将从初始屏幕启动(调用 onCreate),然后打开导航抽屉并选择一个菜单项,应用程序崩溃。
这是我的异常:“java.lang.IllegalStateException:无法在 onSaveInstanceState 之后执行此操作”
它恰好发生在我所做的事情上
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
我不知道为什么在重新打开应用程序时而不是在最初打开应用程序时收到此消息。有什么线索吗??
这是我写的代码.我无法找到此功能何时崩溃,但有时会工作.
public class ListFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
main();
IntentFilter filter1 = new IntentFilter("com.venkat.listfragment");
registerReceiver(myReceiver, filter1);
// register reciever intent filter.
}
public void main(){
IntentFilter filter1 = new IntentFilter("com.venkat.listfragment");
registerReceiver(myReceiver, filter1);
List_Fragment ls_fragment = new List_Fragment();
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, ls_fragment).addToBackStack(null).commitAllowingStateLoss();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
}
private BroadcastReceiver myReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
main();
}
};}
Run Code Online (Sandbox Code Playgroud)
我有四个选项卡,当我点击一个选项卡上显示相应的屏幕,从该屏幕我正在浏览的另一个屏幕在同一tab.but,回到前一个画面,当我同一选项卡上单击我已经写了广播接收器.
我收到此错误:
08-19 10:13:51.436: E/AndroidRuntime(2830): FATAL …Run Code Online (Sandbox Code Playgroud) 我试着写简单的音乐播放器并面对这样的问题.在我的UI中,我有几个片段,用于显示歌曲的不同模式(例如,所有音乐,所选文件夹中的音乐,播放列表中的音乐等).我也有一个播放音乐的服务.
当用户在播放状态下关闭播放器时我想保存UI状态(即当前显示片段)并在再次打开播放器后恢复该状态(如果用户关闭播放器处于暂停状态则不需要).
为了保存状态我使用我的Service,如上所述.在onDestroy()我的活动方法中,我将所有需要的数据用于恢复意图和调用startService(intent).服务将此数据保存到本地变量.在onCreate()我的活动方法中,我startService用意图调用,包含已保存状态的请求.在服务中,我将保存的数据置于意图中并将其发送到Activity使用LocalBroadcastManager.getInstance(this).sendBroadcast(intent)方法.在BroadcastListener我的内部类中,我Activity收到此意图并提取数据.看来没关系.
但是当我尝试恢复时Fragments,问题就开始了,当用户关闭播放器时会显示.应用程序崩溃unhandled exception.这里是backstack:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1377)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1395)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:637)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:616)
at com.borune.test.MainActivity.switchFragments(MainActivity.java:58)
at com.borune.test.MainActivity$MyServiceListener.onReceive(MainActivity.java:102)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5032)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索这个例外,但所有提出的解决方案对我的情况都没有帮助.我写了一个重复描述问题的简单项目.这是代码:
MainActivity.java:
public class MainActivity extends ActionBarActivity { …Run Code Online (Sandbox Code Playgroud) 我在不同场景中收到以下消息时出现此错误:
我正在编写一个应用程序,其中两个活动互相交互.Activity-A使用Intent 启动Activity-B.这个Activity-B类有两个片段子级.Fragment-A使用公共活动方法来启动另一个Fragment-B.
public void beginTransaction(ID id, Bundle bundle) {
Fragment fragment = getFragmentItem(id);
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
fragment.setArguments(bundle);
// Add the fragment to the 'fragment_container' FrameLayout
fragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment).commitAllowingStateLoss();
}
Run Code Online (Sandbox Code Playgroud)
Fragment-B每次调用finish()来杀死Activity-B,因此控制再次返回Activity-A.同样的过程重复.做了2-3次我得到了:
java.lang.IllegalStateException:在onSaveInstanceState E/AndroidRuntime(9008)之后无法执行此操作: 在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354)E/AndroidRuntime(9008):在android.support .v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1372)
所以为了避免它,我按照/sf/answers/718300691/开始给我
Java.lang.IllegalStateException:活动已被销毁 E/AndroidRuntime(9235):在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376)E/AndroidRuntime(9235):在android.support.v4. app.BackStackRecord.commitInternal(BackStackRecord.java:595)
任何建议我在这里缺少什么.
GOT …
android illegalstateexception android-fragments fragmentmanager