相关疑难解决方法(0)

Android Fragment onAttach()已弃用

我已经更新了我的应用程序以使用最新的支持库(版本23.0.0),我发现他们已经弃用了Fragment类的onAttach()函数.

代替:

onAttach (Activity activity)
Run Code Online (Sandbox Code Playgroud)

下雪了:

onAttach (Context context)
Run Code Online (Sandbox Code Playgroud)

由于我的应用程序使用了弃用之前传递的活动,我认为可能的解决方案是:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = getActivity();
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

更新:

如果我运行API低于23的设备,则甚至不会调用新的onAttach().我希望这不是他们打算做的!

更新2:

问题已通过SDK的最新更新得到解决.

我已经在我的API 22设备上进行了测试,并且正在调用onAttach(Context).

点击此处查看我几周前开设的错误报告以及Google员工的答案.

android android-fragments

317
推荐指数
6
解决办法
13万
查看次数

Android - onAttach(Context)没有为API 23调用

我已将SDK更新到最新版本(API 23),并且onAttach(Activity)不推荐使用片段方法.因此,不是使用该方法,现在我正在使用,onAttach(Context)但是在生命周期中不会调用此方法.活动是AppCompatActivity来自v7 的实例,片段是类Fragment(android.app.Fragment)的实例.

有任何想法如何onAttach在API 23中工作?

我找到了一些可以帮助您理解和解决此问题的答案:

  • 正如我之前提到的,我正在使用来自支持v7(AppCompatActivity)的活动和来自android.app的片段.

  • 为了显示片段,我在活动上使用方法getFragmentManager获取片段管理器,因此片段管理器是来自android.app的> FragmentManager的实例 - >这是问题所在

  • 如果您在具有API 23的设备上运行应用程序(我在AS模拟器上运行它),您将看到将调用onAttach(Context)方法.在FragmentManager显示片段的过程中,在特定时刻调用onAttach(..)方法.使用getFragmentManager(),您将获得可在该设备上运行的Android版本的片段管理器实例(例如API 22,23).如果应用程序在API <23的设备上运行,则onAttach(Context)方法不可用,片段管理器不知道在API 23中有一个方法onAttach(Context),这就是为什么它不被调用对于API <23 - >这种问题的解决方案是使用支持库中的FragmentManager.

  • 解决方案:

    1. 使用getSupportFragmentManager()将强制您使用支持库中的片段.因此,第一个解决方案是使用支持lib中的片段替换所有片段并使用getSupportFragmentManager().

    2. 我已经实现的解决方案是处理2种可能性(1.应用程序在API <23的设备上运行,应用程序在API> = 23的设备上运行).

    不久,在我的实现中,我有一个来自项目的所有片段的基类,我在那里添加了这个代码:

    /*
     * onAttach(Context) is not called on pre API 23 versions of Android and onAttach(Activity) is deprecated
     * Use onAttachToContext instead
     */
    @TargetApi(23)
    @Override
    public final void onAttach(Context context) {
        super.onAttach(context);
        onAttachToContext(context);
    }
    
    /*
     * Deprecated on API 23
     * Use onAttachToContext …
    Run Code Online (Sandbox Code Playgroud)

    android android-appcompat

    72
    推荐指数
    4
    解决办法
    2万
    查看次数

    如何将片段中的本地默认值设置为 en

    我搜索了无数与此类似的问题,但没有在其中任何一个中找到我的答案。我想将片段中的本地默认设置设置为英语,我使用此代码来和onStart()但 没有工作onAttach()onCreateView()

    我的片段代码:

    package com.demo.tomcatfire.taskmanagerui;
    
    import android.content.Context;
    import android.content.Intent;
    import android.content.res.Configuration;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.LinearLayout;
    
    import java.util.Locale;
    
    public class MainFragment2 extends Fragment implements View.OnClickListener {
        private LinearLayout ll_display,ll_add,ll_about,ll_about2,ll_learnig,ll_learnig2;
    
    
        @Override
        public void onAttach(Context context) {
    
            Locale locale = new Locale("en");
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            context.getResources().updateConfiguration(config,
                    context.getResources().getDisplayMetrics());
        }
    
        @Override
        public void onStart() {
    
            Locale locale = new Locale("en");
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale …
    Run Code Online (Sandbox Code Playgroud)

    android localization fragment

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