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>