1. 程式人生 > >Activity向Fragment傳值

Activity向Fragment傳值

這裡只介紹在建立Fragment物件的時候,怎麼給Fragment傳遞值。因為最近比較忙,過一陣會發表具體介紹Fragment的使用文章
在原來看書學習的時候,書中介紹到很多傳值得方法,但推薦使用Bundle物件傳遞

讓Fragment顯示有兩種方式,但是<fragment>標籤這樣的方式是不推薦的,顯得中規中矩,後期也不是很好操作和維護,這裡利用FragmentManager的方式新增到佈局中

程式碼如下:
佈局:(簡單到不行,就是一個RelativeLayout,一會兒用FragmentManager的方式將Fragment新增進去)

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/relativeLayout_show" android:layout_width="match_parent" android:layout_height="match_parent" >
</RelativeLayout>

MainActivity:

//建立Fragment物件的時候,使用Bundle物件傳值給Fragment
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //建立Fragment物件,並通過Bundle物件傳遞值 MyFragment fragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("key", "value"); fragment.setArguments(bundle); //利用FragmentManager物件和事物物件新增到佈局中
FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.relativeLayout_show, fragment; transaction.commit(); }

MyFragment:

//拿到Bundle物件,如果有引數傳遞,就拿到值並賦值給str
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{
    Bundle bundle = this.getArguments();
    if (bundle != null)
    {
        String str = bundle.getString("key");
    }
    TextView textView = new TextView(getActivity());
    textView.setText("上上下下的享受");//是電梯,別誤會
    return textView;
}

==========還有一種寫法,也是用Bundle物件,是我看視訊後封裝的==========

個人感覺這種寫法比較屌,因為考慮是面向物件的話,傳遞值這樣的事情應該由Fragment來做,也就是你(Fragment)要什麼值,我(Activity)就給你什麼值,這樣看上去很牛B,用的話也是一目瞭然,廢話不多說上程式碼了,為了各位看著方便,小弟在這裡直接寫一個類裡面了,方便觀看。開發中千萬不要這麼寫啊。。。

public class MainActivity extends Activity 
{
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        MyFragment fragment = MyFragment.newMyFragment("給老子過去");//如果不想傳值,給過去一個null就行
        transaction.add(R.id.relativeLayout_show, fragment);
        transaction.commit();
    }
}



/*========================Fragment↓==========================*/

class MyFragment extends Fragment 
{
    String mValue;// 用於接收Activity傳過來的數值
    private static final String MARK = "mark";// 設定標記

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
        // 那到Bundle物件,如果有引數傳遞,就拿到值並賦值給mValue
        Bundle bundle = this.getArguments();
        if (bundle != null)
        {
            mValue = bundle.getString(MARK);
        }
        TextView textView = new TextView(getActivity());
        textView.setText(mValue);
        return textView;
    }


    /**
     * 別通過new物件拿到Fragment了,直接呼叫我就行了
     * @param value 想要拿到我,好啊!給我值(value)
     * @return fragment
     */
    public static MyFragment newMyFragment(String value)
    {
        //將fragment繫結引數
        Bundle bundle = new Bundle();
        bundle.putString(MARK, value);
        MyFragment fragment = new MyFragment();
        fragment.setArguments(bundle);
        return fragment;
    }
}

好!activity向fragment傳值就分享到這裡!

if(有疑問)
{
    歡迎QQ騷擾(997797281);
}