片段的MainActivity和从片段返回MainActivity

时间:2015-07-08 04:07:16

标签: java android android-fragments

Solve by using 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视图之外我还有其他选择吗

注意:被修改

4 个答案:

答案 0 :(得分:1)

您可以将事务添加到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();

要返回活动视图,请将其命名为pop backstack

FragmentManager fm = getFragmentManager();
fm.popBackStack();

您也可以使用标签用

弹出特定的交易
fm.popBackStack("tag");

答案 1 :(得分:1)

片段中有一个名为 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来摆脱不必要的代码

答案 2 :(得分:0)

你也可以像片段一样返回片段

getActivity()getSupportFragmentManager()popBackStack();

答案 3 :(得分:0)

我解决问题的任何方式,万一有人可能会看到这个。我想出了两个解决方案,我认为第一个最适合我。感谢Adnan Basar给我的想法。

第一个解决方案非常简单,只需在我的onClick事件中添加此代码即可

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();
    }

并使用覆盖方法

select d.description as description,d.upload_count as count
from
(select a.doc_type,b.description,count(*) as upload_count
from case_uploads a,doc_type b
where a.doc_type = b.doc_type
and a.upload_dt >= $P{START_DATE}
and a.upload_dt <= $P{END_DATE}
group by a.doc_type,b.description) d
where d.doc_type not in ('215','F35')
and d.upload_count IS NOT NULL

union all

select 'Applications' as description,SUM(d.upload_count) as count
from
(select a.doc_type,b.description,count(*) as upload_count
from case_uploads a,doc_type b
where a.doc_type = b.doc_type
and a.upload_dt >= $P{START_DATE}
and a.upload_dt <= $P{END_DATE}
group by a.doc_type,b.description) d
where d.doc_type in ('215','F35')
having SUM(d.upload_count) IS NOT NULL