2017-12-06 3 views
2

Als ich mit Fragments herumspielte, wunderte ich mich über den richtigen Weg, meine Fragmente zu bevölkern.Fragment getArgument() right location

Wie die Doc sagt, verwende ich das newInstance() Muster Argumente meiner Fragmente hinzuzufügen:

public static ItemFragment newInstance(ItemRealm item, AnnaleModel model) { 
    ItemFragment fragment = new ItemFragment(); 
    Bundle args = new Bundle(); 
    args.putString(MyPagerAdapter.KEY_ITEM, item.getId()); 
    args.putParcelable(MyPagerAdapter.KEY_MODEL, model); 
    fragment.setArguments(args); 
    return fragment; 
} 

Aber dann gibt es mehrere Verhaltensweisen ich im Netz passiert sehen.

Die meisten es gesehen im onCreateView() Methode zu setzen und stellen die Ergebnisse in den Bereichen:

protected String itemId; 
protected Model mModel ; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Bundle args = getArguments(); 
    if (args == null || (!args.containsKey(MyPagerAdapter.KEY_ITEM) || !args.containsKey(MyPagerAdapter.KEY_MODEL))) { 
     Log.e("TAG", "incorrect Bundle"); 
     return null; 
    } 
    itemId = args.getString(MyPagerAdapter.KEY_ITEM); 
    mModel = args.getParcelable(MyPagerAdapter.KEY_MODEL); 
} 

Ich kann an einigen anderen Orten sehen genau die gleiche Sache in der Fragment.onCreate() Methode anstelle von onCreateView() zu setzen.

Und das letzte Verhalten ist im Getter aufrufen.

private Model getModel(){ 
    if (getArguments() != null) { 
     return getArguments().getParcelable(AnnalePagerAdapter.KEY_MODEL); 
    } 
    Log.e("Dan", "ItemFragment :: getModel (279): model==null !!"); 
    return null; 
}//I can also think about some lazyloading is needed 

Die Fragen sind dann:

  • Gibt es nun ein Konsens über die Muster (diese 3 oder sogar eine andere) zu verwenden?
  • Gibt es einige Kontexte, die ich lieber verwenden sollte als eine andere?

Antwort

0

Verwenden Sie keinen Getter. Das macht die Sache einfach komplizierter. Warum enthalten Sie Fragment-Logik in der Klasse , richtig?

Was onCreateView() vs onCreate(), nenne ich in onCreate() weil diese Methode aufgerufen wird, bevor die Ansicht erstellt wird. Also, wenn Sie irgendwelche Berechnungen oder andere Sachen haben, dann können Sie es hier tun. Speichern Sie es in globalen Variablen und setzen Sie sie in onCreateView. Aber anstatt das zu tun, können Sie es einfach in onCreateView machen, oder? Also, was ist der Unterschied dann? Es hilft, die Logik getrennt zu halten. Initialisieren/aktualisieren Sie die Ansicht in onCreateView und tun Sachen Vorkalkulationen in onCreate

Example from google's samples