簡體   English   中英

MainActivity進行分段,然后從該分段返回MainActivity

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM