2014-01-28 43 views
4

我有一個片段,它使用onCreateView中的getArguments()方法來獲取一些輸入數據。在佈局中聲明Android Fragment,如何設置參數?

我在ViewPager中使用這個片段,它工作正常。

當我嘗試在不同的活動中重複使用這個片段時,問題就開始了,只顯示這個片段。我想片段加入到活動中的佈局:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment" 
    android:name="com.example.ScheduleDayFragment" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

的問題是:如何將一個包傳遞到佈局中聲明的片段?

+3

檢查:http://stackoverflow.com/questions/13034746/if-i-declare-a-fragment-in-an-xml-layout-how-do-i-pass-it-a-bundle –

+0

謝謝,似乎這是不可能的。 – kmalmur

+0

爲什麼你需要這樣做? – keshav

回答

11

最好的辦法是改變FrameLayout並將代碼片段。

public void onCreate(...) { 

    ScheduleDayFragment fragment = new ScheduleDayFragment(); 
    fragment.setArguments(bundle); 
    getSupportFragmentManager().beginTransaction() 
       .add(R.id.main_view, fragment).commit(); 
    ... 
} 

這裏是佈局文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

你是否擔心這會以某種方式降低性能?

+3

我結束了這個解決方案。我試圖找到更優雅的東西,但顯然這是不可能的。 – kmalmur

+0

+1反饋並顯示一些積極主動:D – Subby

1

如果你堅持你的佈局中片段的聲明,您可以將您Fragment.OnCreateView()

if (savedInstanceState != null) { 
     // value can be restored after Fragment is restored 
     value = savedInstanceState.getInt("myValueTag", -1); 

    } else if (getArguments() != null) { 
     // value is set by Fragment arguments 
     value = getArguments().getInt("myValueTag", -1); 

    } else if (getActivity() != null && getActivity().getIntent() != null) { 
     // value is read from activity intent 
     value = getActivity().getIntent().getIntExtra("myValueTag", -1); 
    } 

最後只是增加你的價值信息,以startActivity創建的意圖()調用中使用此檢查