我已经更新了我的应用程序以使用最新的支持库(版本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员工的答案.
我已将SDK更新到最新版本(API 23),并且onAttach(Activity)不推荐使用片段方法.因此,不是使用该方法,现在我正在使用,onAttach(Context)但是在生命周期中不会调用此方法.活动是AppCompatActivity来自v7 的实例,片段是类Fragment(android.app.Fragment)的实例.
有任何想法如何onAttach在API 23中工作?
解
我找到了一些可以帮助您理解和解决此问题的答案:
解决方案:
使用getSupportFragmentManager()将强制您使用支持库中的片段.因此,第一个解决方案是使用支持lib中的片段替换所有片段并使用getSupportFragmentManager().
我已经实现的解决方案是处理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) 我搜索了无数与此类似的问题,但没有在其中任何一个中找到我的答案。我想将片段中的本地默认设置设置为英语,我使用此代码来和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)