相关疑难解决方法(0)

Android Fragment生命周期超过方向更改

使用兼容包以使用Fragments定位2.2.

重新编码活动以在应用程序中使用片段后,我无法获得方向更改/状态管理工作,因此我创建了一个带有单个FragmentActivity和单个片段的小型测试应用程序.

方向更改的日志很奇怪,多次调用片段OnCreateView.

我显然缺少一些东西 - 比如分离片段并重新连接它而不是创建一个新实例,但是我看不到任何可以指示我出错的文档.

请问有人能说清楚我在做错了吗.谢谢

方向更改后的日志如下.

Initial creation
12-04 11:57:15.808: D/FragmentTest.FragmentTestActivity(3143): onCreate
12-04 11:57:15.945: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:57:16.081: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null


Orientation Change 1
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): onSaveInstanceState
12-04 11:57:39.031: D/FragmentTest.FragmentTestActivity(3143): onCreate
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:57:39.167: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null


Orientation Change 2
12-04 11:58:32.162: D/FragmentTest.FragmentOne(3143): onSaveInstanceState
12-04 11:58:32.162: D/FragmentTest.FragmentOne(3143): onSaveInstanceState
12-04 11:58:32.361: D/FragmentTest.FragmentTestActivity(3143): onCreate
12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null
12-04 11:58:32.361: …
Run Code Online (Sandbox Code Playgroud)

android orientation android-fragments android-activity

115
推荐指数
3
解决办法
9万
查看次数

屏幕旋转时,为什么片段不会保留状态?

我在PreferenceFragment中获取一些自定义DialogPreference子类时遇到了一些麻烦,以便在旋转屏幕时保持可见.我在使用PreferenceActivity时没有遇到这个问题,因此我不知道它是Android错误还是代码问题,但我希望有人确认他们是否有相同的体验.

要对此进行测试,首先要创建一个包含至少一个DialogPreference的首选项屏幕(哪个子类无关紧要).然后在PreferenceActivity中显示它.运行应用程序时,请按DialogPreference以显示其对话框.然后旋转屏幕以使方向发生变化.对话框是否仍然可见?

然后尝试相同,但使用PreferenceFragment显示您的首选项而不是PreferenceActivity.再次,旋转屏幕时对话框是否仍然可见?

到目前为止,我发现如果使用PreferenceActivity,对话框将保持可见,但如果使用PreferenceFragment则不会.查看DialogPreference源代码,似乎正确的行为是对话框保持可见,因为在屏幕isDialogShowing重定向时onSaveInstanceState()调用时会保存状态信息.因此,我认为一个错误可能会阻止PreferenceFragment(及其中的所有内容)恢复该状态信息.

如果它是Android错误,那么它具有深远的影响,因为任何使用PreferenceFragment的人都无法保存和恢复状态信息.

有人可以确认吗?如果它不是一个错误,那么发生了什么?

android preferenceactivity android-preferences android-fragments dialog-preference

27
推荐指数
1
解决办法
2万
查看次数

android动作栏onNavigationItemSelected

我正在为android 3+开发

在我的操作栏中,我有一个下拉列表(请参阅如何隐藏/取消隐藏Android 3上的操作栏列表?我想要的下拉列表).问题是我需要在用户选择某些内容时执行某个操作,但Android在绘制视图时调用onNavigationItemSelected()作为soons,因此实际上没有选择.

我如何检测用户是否真的按下了某些内容并且它不是来自android的假电话?

public class ListDittaListener implements OnNavigationListener{

    private BaseActivity activity;

    private ListDittaListener()
    {

    }

    public ListDittaListener(BaseActivity activity)
    {
        this.activity = activity;
    }

    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId)
    {
        MyApp appState = ((MyApp)this.activity.getApplicationContext());
        appState.setDittaSelezionata( (int) itemId);

        SharedPreferences settings = this.activity.getSharedPreferences(MyApp.PREFS_NAME, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt("ditta_id_selezionata", (int) itemId);

            ////////restart activity this.activity.recreate();

        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

android android-actionbar

12
推荐指数
1
解决办法
2万
查看次数

片段onCreateView多次调用

我正在附加每个片段的片段(许多片段FrameLayout)Activity有自己的视图膨胀onCreateView().

现在,

如果我旋转屏幕Landscape/Protrait,onCreateView()则调用片段而不是调用其附加的Activity的onCreate()方法.因此,视图呈现两次.

我希望onCreate()每次有配置更改时都调用Activity .可能吗?

活动: MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    getSupportFragmentManager().beginTransaction()
        .add(R.id.layout_replace, new MyFragment()).commit();
}
Run Code Online (Sandbox Code Playgroud)

片段: MyFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {         
    return (ScrollView)inflater.inflate(R.layout.some_layout, container, false);
}
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-activity

9
推荐指数
1
解决办法
1万
查看次数

由于棒棒糖中的'void dalvik.system.CloseGuard.close()'导致的NullPointerException

我的应用程序在Android OS Lollipop中运行时,后台出现以下异常.无法在我的代码中弄清楚它的确切位置或对它的任何引用.

02-23 17:58:14.145: E/System(16417): Uncaught exception thrown by finalizer
02-23 17:58:14.146: E/System(16417): java.lang.NullPointerException: Attempt to invoke virtual method 'void dalvik.system.CloseGuard.close()' on a null object reference
02-23 17:58:14.146: E/System(16417):    at java.io.FileInputStream.close(FileInputStream.java:113)
02-23 17:58:14.146: E/System(16417):    at java.io.FileInputStream.finalize(FileInputStream.java:140)
02-23 17:58:14.146: E/System(16417):    at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
02-23 17:58:14.146: E/System(16417):    at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
02-23 17:58:14.146: E/System(16417):    at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过吗?

android android-5.0-lollipop

9
推荐指数
1
解决办法
3928
查看次数

Android片段OnCreateView调用了两次

我正在使用FragmentPagerAdapter和片段.我的问题是,当我调用setCurrentItem时,正在加载的片段的OnCreateView方法被调用两次.重要的是要注意,片段不会重新创建,只需恢复即可.我迫不及待地想找到一个只能调用一次OnCreateView的解决方案.

我已经看过以下问题以及更多问题,但它们都没有包含我的案例的答案:

Android oncreateview调用了两次

OnCreateView多次调用/使用ActionBar和Fragments

片段onCreateView和onActivityCreated调用了两次

我发现的大多数问题与FragmentViewPagers无关,这使得它们几乎无益.

我会非常感谢任何帮助!

android oncreate android-fragments android-viewpager

6
推荐指数
1
解决办法
5074
查看次数