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视图之外我还有其他选择吗
注意:被修改
答案 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