Activity向Fragment傳值
阿新 • • 發佈:2019-02-17
這裡只介紹在建立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);
}