2017-09-20 4 views
0

ich mit Argumenten Fragment erstellen möchten,Android erstellen Fragment mit Argumenten arbeiten nicht

und beziehen sich auf diesen Beitrag [Do fragments really need an empty constructor?].

Aber nicht funktionieren, ich weiß nicht, wie es zu beheben ist.

Code:

Fragment

public class TestFragment extends Fragment { 
    private final static String BUNDLE_TITLE = "title"; 
    private RelativeLayout rootView; 
    private String title = ""; 

    public static TestFragment newInstance(String titleName){ 
    Bundle bundle = new Bundle(); 
    bundle.putString(BUNDLE_TITLE,titleName); 
    TestFragment testFragment = new TestFragment(); 
    testFragment.setArguments(bundle); 
    return testFragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
         @Nullable Bundle savedInstanceState) { 
    if (rootView == null) { 
     rootView = (RelativeLayout) inflater.inflate(R.layout.find_mac, container, false); 
    } 
    return rootView; 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Bundle data = getArguments(); 
    if(data != null){ 
     this.title = getArguments().getString(BUNDLE_TITLE,""); 
    } 
    } 

    String getTitle() { 
    return title; 
    } 
} 

Und in Aktivität

@Override 
protected void onStart() { 
    super.onStart(); 
    TestFragment testFragment = TestFragment.newInstance("hello"); 
    Log.d("debug","get title:"+testFragment.getTitle()); 
} 

der Log nur "Titel bekommen:"

Ich kann nicht den Titel bekommen "Hallo Welt.

Antwort

3

Dies liegt daran, wenn Sie anrufen: ist

TestFragment testFragment = TestFragment.newInstance("hello"); 
Log.d("debug","get title:"+testFragment.getTitle()); 

das testFragment Fragment noch nicht erstellt fertig. Weil es ein asynchroner Prozess ist.

So müssen Sie einen Listener in Aktivität erstellen, um zu sagen, dass das Fragment erstellt wird, und dann können Sie den Titel abrufen.

Sie können Communicating with Other Fragments lesen, um den Listener zu implementieren.

+2

Ich denke, er muss dieses Fragment auch an eine Aktivität anhängen. Sonst funktioniert der Lebenszyklus möglicherweise nicht? –

+1

@ EmreAktürk Sie haben Recht –

+0

Sie haben Recht. Ich vermisse das... –

Verwandte Themen