首页 > 解决方案 > 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();
        }
    }

}

任何的想法 ?:(

标签: javaandroidandroid-studio

解决方案


根据https://developer.android.com/reference/android/app/Activity,调用 onBackPressed 完成当前活动,因此如果从启动活动中调用,它将不会返回到那里。删除此调用似乎可以解决此处看到的问题。


推荐阅读