[英]MainActivity to Fragment and from that Fragment back to MainActivity
通過使用getActivity()解決
我有這個MainActivity.java和RepeatEntry.java
在我的MainActivity內部,我有這段代碼具有RepeatEntry ui
//i did hide two linear layout here with buttons and edittext inside it ,using the following method
hideTwoLinearLayout();
showCategoryContainerLayout();
Fragment fragment = new RepeatEntry();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
//category_cont is a linear layout container for my fragment
ft.replace(R.id.category_cont, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
在我的RepeatEntry.java示例代碼中
Button k = (Button) v.findViewById(R.id.button);
k.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent(getActivity(),MainActivity.class);
// startActivity(intent);
// if i use popBackStack and also remove the code for intent , i cannot show what i hide
//note i have a method inside mainactivity to showTwoLinearLayout()
getFragmentManager().popBackStack();
}
});
現在我的問題是, 除了使用意圖返回MainActivity視圖外 , 我還有其他選擇嗎?
注意:已編輯
您可以將事務添加到Backstack,然后通過彈出Backstack進行反向操作,代碼在此處
Fragment fragment = new RepeatEntry();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
//category_cont is a linear layout container for my fragment
ft.replace(R.id.category_cont, fragment).addToBackStack("tag");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
要返回到活動視圖,請調用此方法以彈出堆棧
FragmentManager fm = getFragmentManager();
fm.popBackStack();
您也可以使用標簽彈出以下特定交易
fm.popBackStack("tag");
您的片段中有一個稱為onAttach的方法。 您可以編寫一個接口並分配片段的活動,例如:
private MyFragmentListener mListener;
@Override public void onAttach(Activity activity) {
super.onAttach(activity);
mListener = ((MainActivity) activity);
}
public interface MyFragmentListener{
void onClicked(int value);
}
//Call your listener when button clicked or other events
... mListener.onClicked(position);
或者另一個解決方案是使用Otto或Eventbus擺脫不必要的代碼
您也可以像這樣返回Fragment
getActivity()。getSupportFragmentManager()。popBackStack();
以任何方式解決我的問題,以防萬一有人看到。我想出了兩種解決方案,我認為第一種解決方案最適合我。感謝Adnan Basar提出的想法。
只需將代碼添加到我的onClick事件中, 第一個解決方案就非常簡單
((MainActivity) getActivity()).showTwoLinearLayout();
((MainActivity) getActivity()).hideCategoryContainerLayout();
在extends Fragment{
之后,我創建了Activity
第二個解決方案 extends Fragment{
Activity mainActivity;
並使用替代方法
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mainActivity= activity;
}
@Override
public void onDestroy() {
super.onDestroy();
// this is where i call the method for showing the twolinearlayout again
((MainActivity) mainActivity).showTwoLinearLayout();
((MainActivity) mainActivity).hideCategoryContainerLayout();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.