0

我有一个带有 appbar 的活动和一个带有 appbar 的全屏对话框片段(该对话框是从活动中调用的)。当按下活动的主页按钮时,我设置了一些操作,当按下主页按钮和对话框片段时,它应该关闭对话框。我注意到这两个按钮具有相同的 id (android.R.id.home)。并且显然在调用方法“onOptionsItemSelected”时存在冲突,因为当我按下对话框的主页按钮时它不起作用,但是如果删除活动上的代码部分(如果 id == android.R .id.home) 它工作正常并且对话框关闭。我应该怎么办?。有没有办法防止这种冲突,也许为主页按钮设置一个不同的 id?

这是活动的方法

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_logout) {
            exitApp();
            return true;
        }

        else if ((id == android.R.id.home) && searchActivated) {
            drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
           toggle.syncState();
            searchActivated=false;
            reload_fragment_data();
            return true;
        }
        else if ((id == android.R.id.home) && (!searchActivated))
        {
            drawer.openDrawer(GravityCompat.START);  // OPEN DRAWER
            return true;
        }
        return super.onOptionsItemSelected(item);

    }

这是对话片段的方法

public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_next) {
            pager.setCurrentItem(pager.getCurrentItem() + 1);
           updateTitle();
            return true;
        } else if (id==R.id.action_previous)
        {

            pager.setCurrentItem(pager.getCurrentItem() - 1);
           updateTitle();
            return true;
        }

        else if (id == android.R.id.home) {

            dismiss();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
4

1 回答 1

0

您可以在活动中应用并尝试此解决方案。

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container);
    //noinspection SimplifiableIfStatement
    if (id == R.id.action_logout) {
        exitApp();
        return true;
    }

    else if ((id == android.R.id.home) && searchActivated && !(fragment instanceof DialogFragmentClassName)) {
        drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        toggle.syncState();
        searchActivated=false;
        reload_fragment_data();
        return true;
    }
    else if ((id == android.R.id.home) && (!searchActivated))
    {
        drawer.openDrawer(GravityCompat.START);  // OPEN DRAWER
        return true;
    }
    return super.onOptionsItemSelected(item);

}
于 2017-04-22T05:00:35.690 回答