Fragment獲取Activity實例 | Activity獲取Fragment實例 |
getActivtiy() | getFragmentManager()>> FragmentManager: findFragmentById() findFragmentByTag() popBackStack():將Fragment從後臺棧中彈出(模擬用戶按下BACK按鍵)
beginTransaction()>>
FragmentTransAction:
add(int containerViewId, Fragment fragment
)
remove(R.id.framework,fragment
) addToBackStack()
commit()
|
//Activity中
Fragment fragment =newFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction =fragmentManager.beginTransaction();
transaction.replace(R.id.framework,fragment);
transaction.addToBackStack();
transaction.commit();
//
MainActivitypublicclassMainActivityextendsActivityimplements BookFragment.Callbacks
{
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_twopane);
// 建立Bundle,準備向Fragment傳入參數
Bundle arguments =newBundle();
arguments.putInt("name", x);
BookFragment fragment =newBookFragment();
fragment.setArguments(arguments);
getFragmentManager().beginTransaction()
}
// 實現Callbacks接口必須實現的方法
@Override
publicvoid someAction(string s)
{
String s1=s;//獲取到fragment傳來的參數
}
}
//activity_book_twopane.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="middle">
<!-- 添加一個Fragment -->
<fragment
android:name="org.crazyit.app.BookFragment"
android:id="@+id/book_list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<!-- 添加一個FrameLayout容器 -->
<FrameLayout
android:id="@+id/book_detail_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"/>
</LinearLayout>
//
BookFragmentpublicclassBookFragment extends Fragment
{
privateCallbacks mCallbacks;
// 定義一個回調接口,該Fragment所在Activity須要實現該接口,該Fragment將經過該接口與它所在的Activity交互
public interface Callbacks
{
publicvoid someAction(String s);
}
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
publicView onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment1,container,false);
TextView tv= ((TextView) rootView.findViewById(R.id.book_title));
tv.setText("");
return rootView;
}
@Override
publicvoid onAttach(Activity activity)
{
super.onAttach(activity);
// 若是Activity沒有實現Callbacks接口,拋出異常
if(!(activity instanceof Callbacks))
{
thrownewIllegalStateException(
"BookListFragment所在的Activity必須實現Callbacks接口!");
}
// 把該Activity當成Callbacks對象
mCallbacks =(Callbacks)activity;
String s ="to activity";
mCallbacks.someAction(s);}
@Override
publicvoid onDetach()
{
super.onDetach();
// 將mCallbacks賦爲null。
mCallbacks = null;
}
}
//fragment1.xml
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
style="?android:attr/textAppearanceLarge"
android:id="@+id/book_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"/>
</LinearLayout>