Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Don';屏幕旋转时的t调用方法_Android_Android Fragments - Fatal编程技术网

Android Don';屏幕旋转时的t调用方法

Android Don';屏幕旋转时的t调用方法,android,android-fragments,Android,Android Fragments,我的父片段名为OpFragment。从这个片段继承了我的应用程序中的所有片段 public abstract class OpFragment extends Fragment { private Loading loading; public abstract int getLayoutId(); public abstract void getData(); public abstract void setListeners(); prot

我的父片段名为
OpFragment
。从这个片段继承了我的应用程序中的所有片段

public abstract class OpFragment extends Fragment {

    private Loading loading;

    public abstract int getLayoutId();


    public abstract void getData();


    public abstract void setListeners();
    protected BackHandlerInterface backHandlerInterface;

    public boolean onBackPressed(){
        return false;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
        if(!(getActivity()  instanceof BackHandlerInterface)) {
            throw new ClassCastException("Hosting activity must implement BackHandlerInterface");
        } else {
            backHandlerInterface = (BackHandlerInterface) getActivity();
        }
        FragmentArgs.inject(this);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(getLayoutId(), container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if(!isAdded()){
            return;
        }
        getData();
        setListeners();

    }

    protected String returnName() {
        return null;
    }

    public void showTitle() {
        EventBus.getDefault().post(new ShowName(returnName()));
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    public Loading getLoading() {
        if (this.loading == null) {
            this.loading = new Loading(this.getActivity());
        }
        return this.loading;
    }

    /**
     * Gets a component for dependency injection by its type.
     */
    @SuppressWarnings("unchecked")
    protected <C> C getComponent(Class<C> componentType) {
        return componentType.cast(((HasComponent<C>) getActivity()).getComponent());
    }

    @Override
    public void onStart() {
        super.onStart();
        backHandlerInterface.setSelectedFragment(this);
    }

    public interface BackHandlerInterface {
        void setSelectedFragment(OpFragment backHandledFragment);
    }

    @Override
    public void onResume() {
        super.onResume();
        sendGAScreens();
    }

    private void sendGAScreens() {
        final Tracker tracker = OpApp.getDefaultTracker();
        if(tracker != null) {
            tracker.setScreenName(getClass().getSimpleName());
            tracker.send(new HitBuilders.ScreenViewBuilder().build());
        }
    }
}
公共抽象类OpFragment扩展了Fragment{
私人装载;
公共摘要int getLayoutId();
公共摘要void getData();
公共抽象void setListeners();
受保护的BackHandlerInterface BackHandlerInterface;
公共布尔值onBackPressed(){
返回false;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRetainInstance(真);
if(!(getActivity()实例BackHandlerInterface)){
抛出新的ClassCastException(“宿主活动必须实现BackHandlerInterface”);
}否则{
backHandlerInterface=(backHandlerInterface)getActivity();
}
FragmentArgs.注入(此);
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气器。充气(getLayoutId(),容器,错误);
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
如果(!isAdded()){
返回;
}
getData();
setListeners();
}
受保护的字符串returnName(){
返回null;
}
公开无效showTitle(){
EventBus.getDefault().post(新的ShowName(returnName());
}
@凌驾
公共无效onDestroyView(){
super.onDestroyView();
}
公共加载getLoading(){
if(this.loading==null){
this.loading=新加载(this.getActivity());
}
返回此文件。正在加载;
}
/**
*按类型获取依赖项注入的组件。
*/
@抑制警告(“未选中”)
受保护的C getComponent(类componentType){
返回componentType.cast(((HasComponent)getActivity()).getComponent());
}
@凌驾
public void onStart(){
super.onStart();
backHandlerInterface.setSelectedFragment(此);
}
公共接口BackHandlerInterface{
void setSelectedFragment(OpFragment backhandledframent);
}
@凌驾
恢复时公开作废(){
super.onResume();
sendGAScreens();
}
私人气体过滤器(){
final Tracker Tracker=OpApp.getDefaultTracker();
如果(跟踪器!=null){
setScreenName(getClass().getSimpleName());
send(新的HitBuilders.ScreenViewBuilder().build());
}
}
}
有方法
getData()
setListeners()
onViewCreated
中。 我不想在屏幕旋转后回忆起这种方法。我该怎么做?
简单地检查
savedInstanceState==null
并没有得到预期的结果。

重写此方法以检测片段中的屏幕旋转,并设置一些标志,如果其屏幕旋转。如下图所示:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
Log.d("tag", "config changed");
super.onConfigurationChanged(newConfig); 

int orientation = newConfig.orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT || orientation == Configuration.ORIENTATION_LANDSCAPE)
    flag= true;

.... 
} 
在您的
onViewCreated()
中,执行以下操作

if(!flag){
 // call your functions
}