java - Android (java): OnBackPress() 在尝试从 Activity 返回到片段时关闭我的应用程序
问题描述
到目前为止,我已经从 Fragment 转到 DetailActivity,现在我添加了返回按钮以带我回到上一个 Fragment。我尝试了下面的代码,但应用程序一直关闭而不是返回片段。这两个代码片段都来自我的代码。
片段.java
public class Fragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
private Button btnNext;
public Fragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
btnNext = view.findViewById(R.id.add);
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getContext(),
DetailActivity.class);
startActivity(intent);
getActivity().onBackPressed();
}
});
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return null;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
这是来自 DetailActivity.java 方法的我的 onBackPressed():
public void onBackPressed(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
Log.i("DetailActivity", "popping backstack");
fm.popBackStack();
} else {
Log.i("DetailActivity", "nothing on backstack, calling super");
super.onBackPressed();
}
}
DetailActivity.java:
public class DeatilActivity extends AppCompatActivity {
Button btnBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
btnBack = findViewById(R.id.btnBack);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
/* @Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() != 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
} */
@Override
public void onBackPressed(){
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
Log.i("DetailActivity", "popping backstack");
fm.popBackStack();
} else {
Log.i("DeatilActivity", "nothing on backstack, calling super");
super.onBackPressed();
}
}
}
任何的想法 ?:(
解决方案
根据https://developer.android.com/reference/android/app/Activity,调用 onBackPressed 完成当前活动,因此如果从启动活动中调用,它将不会返回到那里。删除此调用似乎可以解决此处看到的问题。
推荐阅读
- api - 如何通过 Facebook 的 ID Adset 获取 Pixel?
- android - 如何在颤动中禁用抽屉按钮
- c# - 在 OOP 中可以处理对象类之外的对象事件吗?
- google-chrome - Chrome 扩展:在 background.js 中,我无法获取选项卡详细信息。我尝试了 3 种方法,但结果未定义
- git - 如何保持 Gerrit 提交历史与 git log 相同?
- python - 我对 selenium 以及如何使用 CSS 选择器和一个错误有一些疑问:'selenium.common.exceptions.ElementClickInterceptedException'
- input - 浏览器如何渲染输入字段?
- python - CalledProcessError:命令'['bash','-c','python generate_tfrecord.py ....]'返回非零退出状态1.错误
- android - 由于未在 android 虚拟设备 4.0 上安装,Amazon-appstore 拒绝了 Flutter 应用程序
- xamarin - Xamarin 和 UWP 辅助窗口大小调整