2016-06-22 19 views
3

Ich habe Elternfragment namens OpFragment. Von diesem Fragment werden alle Fragmente in meiner App vererbt.Rufen Sie nicht Methode auf Bildschirmrotation

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()); 
     } 
    } 
} 

Es gibt Methoden getData() und setListeners() innerhalb onViewCreated. Ich möchte diese Methoden nach der Bildschirmdrehung nicht aufrufen. Wie kann ich das machen ? Einfach überprüfen savedInstanceState == null gab mir nicht das erwartete Ergebnis.

Antwort

4

überschreiben Sie diese Methode, um die Bildschirmdrehung in Ihrem Fragment zu erkennen und setzen Sie eine Markierung, wenn die Bildschirmdrehung aktiviert ist. wie unten dargestellt:

@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; 

.... 
} 

und in Ihrem onViewCreated() wie dies tun

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