java - 仅针对 3 个 fragment 中的 2 个出现 OnBackPressed() 警报框

标签 java android android-fragments onbackpressed

我正在寻找一种方法来发出“你确定你已经完成了吗?”当用户在编辑注释并添加注释 fragment 时按下后退导航按钮时,会出现警报框,但在查看注释 fragment 时不会出现警报框。下面我附上了每个 fragment 链接到的 Activity 的代码。如果您需要更多来自不同领域的代码,请告诉我。

public class NoteDetailActivity extends AppCompatActivity {


    public static final String NEW_NOTE_EXTRA = "New Note";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note_detail);
        createAndFragment();
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(false);


    }


    private void createAndFragment(){

        Intent intent = getIntent();
        MainActivity.FragmentToLaunch fragmentToLaunch = (MainActivity.FragmentToLaunch) intent.getSerializableExtra(MainActivity.NOTE_FRAGMENT_TO_LOAD_EXTRA);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        switch(fragmentToLaunch){
            case EDIT:
                NoteEditFragment noteEditFragment = new NoteEditFragment();
                setTitle(R.string.edit_fragment_title);
                fragmentTransaction.add(R.id.note_container, noteEditFragment, "NOTE_EDIT_FRAGMENT");
                break;
            case VIEW:
                NoteViewFragment noteViewFragment = new NoteViewFragment();
                setTitle(R.string.view_fragment_title);
                fragmentTransaction.add(R.id.note_container, noteViewFragment, "NOTE_VIEW_FRAGMENT");
                break;
            case CREATE:
                NoteEditFragment noteCreateFragment = new NoteEditFragment();
                setTitle(R.string.create_fragment_title);

                Bundle bundle = new Bundle();
                bundle.putBoolean(NEW_NOTE_EXTRA, true);
                noteCreateFragment.setArguments(bundle);

                fragmentTransaction.add(R.id.note_container, noteCreateFragment, "NOTE_CREATE_FRAGMENT");
                break;

        }

        fragmentTransaction.commit();

    }
    @Override
    public void onBackPressed() {
        new AlertDialog.Builder(this)
                .setMessage("Are you sure you want to exit?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        NoteDetailActivity.this.finish();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }
}

最佳答案

通过获取 fragment 标签来做到这一点

获取这样的标签

 Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_container);
            String tag = fragment.getTag(); // This will return the tag of fragment

然后使用 if-else 来完成任务

  if (tag.equalsIgnoreCase("Home")) {
// Open aLERT box
}else  if (tag.equalsIgnoreCase("Home2")) {
// Open aLERT box
}else  if (tag.equalsIgnoreCase("Home2")) {
// Open aLERT box
}else{
// dO STUFF HERE
}

不要忘记添加fragment标签

关于java - 仅针对 3 个 fragment 中的 2 个出现 OnBackPressed() 警报框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37660617/

相关文章:

java - 来自 JDBC 的 PL/SQL 调用导致 "SQLSyntaxErrorException: ORA-00900"

java - 使用 Java 展开和折叠 Ajax ToolKit Accordion

java - JButton 上的 ActionListener 不执行任何操作

java - 如何在点击服务器并等待响应时在android中放置一个线程安全的进度条?

android - 如何在运行时使用带参数的 FragmentFactory?

android - 使用底部导航栏管理 fragment

java - jsp中如何将数字转换为K千M百万和B十亿后缀

android - 是否可以在android代码中创建形状

android - AAPT2 错误 : in Android Studio 3. 1.3

android - fragment 之间的数据共享