我已经研究了几天,还没有找到一个有效的解决方案。有很多可用的信息,但由于我对Android的经验不足,我无法获得任何建议。
我有一个活动,其中包含3个碎片堆栈,所有碎片都使用FragmentManager Transactions呈现并添加到backstack。当第三个Fragment处于活动状态时,我需要拦截onBackPressed()方法并在Fragment被销毁之前执行一些额外的操作。
我尝试使用Callbacks和Interfaces来捕获Activity上的onBackPressed()并将其发送到第3个片段而没有运气。
在堆栈中深入了解Frag的onBackPressed()方法的正确方法是什么?
如果不清楚,请告诉我。
感谢您的帮助。
答案 0 :(得分:0)
未编译和测试,但这列出了基本方法:
public interface BackButonListener {
boolean OnBackButtonPressed();
}
public interface BackButtonWatchable {
void addBackButtonListener(BackButtonListener listener);
void removeBackButtonListener(BackButtonListener listener);
}
public class MyActivity extends Activity implements BackButtonWatchable {
...
private static ArrayList<BackButtonListener> backButtonListeners
= new ArrayList<BackButtonListener>();
@Override
public void addBackButtonListener(BackButtonListener listener) {
backButtonListeners.add(listener);
}
@Override
public void removeBackButtonListener(BackButtonListener listener) {
backButtonListeners.remove(listener);
}
...
@Override
public void onBackButtonPressed()
{
boolean supressBackButton = false;
for (BackButtonListener listener: backButtonListeners)
{
if (!listener.OnBackButtonPressed()) {
suppressBackButton = true;
}
}
if (!suppressBackButton) {
super.onBackButtonPressed();
}
}
}
public class MyFragment extends Fragment implements BackButtonListerer {
@Override
public void onResume()
{
((BackButtonWatchable)getActivity()).addBackButtonListener(this);
}
@Override
public void onPause() {
((BackButtonWatchable)getActivity()).removeBackButtonListener(this);
}
}
答案 1 :(得分:0)
克里特岛界面
public interface OnBackPressedListener {
void onBackPressed();
}
并在活动中创建字段
private OnBackPressedListener mListener;
并且您的onBackPressed()应该看起来像
if (mListener != null) {
mListener.onBackPressed();
} else { /* do your acitivty usual stuff */ }
创建片段时,您在活动中将此片段注册为mListener,并且不要在onDestroy中将其设置为null。
答案 2 :(得分:0)
这是回答我问题的帖子。对于一个Android新手,这告诉我需要去哪里。
https://stackoverflow.com/a/30865486/2640458
需要从其活动中查看onBackPress()方法的片段:
public class RatingFragment extends Fragment implements ContentActivity.OnBackPressedListener {
@Override
public void doBack() {
getFragmentManager().popBackStack();
}
上述片段中对侦听器的非常重要的订阅:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_rating, container, false);
((ContentActivity)getActivity()).setOnBackPressedListener(this);
}
需要将onBackPress()方法发送到上述片段的活动:
public class ContentActivity extends Activity {
protected OnBackPressedListener onBackPressedListener;
public interface OnBackPressedListener {
void doBack();
}
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {
this.onBackPressedListener = onBackPressedListener;
}
@Override
public void onBackPressed() {
if (onBackPressedListener != null)
onBackPressedListener.doBack();
else
super.onBackPressed();
}
@Override
protected void onDestroy() {
onBackPressedListener = null;
super.onDestroy();
}
}