2

MyPanelActivity包含一个带有项目列表的 recyclerView。每个项目都有一个点击事件。此点击打开DetailsActivity

DetailsActivity有一个 floatingActionButton 可以打开一个全屏对话框(我的类DetailDialogFragmentextends DialogFragment)。

DetailDialogFragment有一个带解雇的向上/主页按钮。

问题:如果用户在向上按钮上单击,对话框会被关闭,但也会DetailsActivity消失,并且应用程序会返回到PanelActivity.

可能的原因:对话框的向上按钮下方是DetailsActivity. 当一个对话框结束一个活动并且在同一个地方都有一个向上按钮时,是否可以触发两个点击事件?


编辑:显示一些代码。

从 PanelActivity 打开 DetailsActivity(单击 recyclerView 中的一项)。

Intent intent = new Intent(context, DetailsActivity.class);
intent.putExtra("headerCode", headerCode.getText());
context.startActivity(intent);

DetailsActivity 中的向上按钮。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

在 DetailsActivity 中打开全屏对话框。

private void showCreateDetailDialog() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    DetailDialogFragment newFragment = new DetailDialogFragment();

    // The device is smaller, so show the fragment fullscreen
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    // For a little polish, specify a transition animation
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    // To make it fullscreen, use the 'content' root view as the container
    // for the fragment, which is always the root view for the activity
    transaction.add(android.R.id.content, newFragment)
            .addToBackStack(null).commit();
}

最后,DetailDialogFragment 中的向上按钮。

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

    if (id == R.id.save) {
        validateForm();
        return true;
    } else if (id == android.R.id.home) {
        // handle close button click here
        dismiss();
        return true;
    }

    return super.onOptionsItemSelected(item);
}
4

2 回答 2

1

我还没有测试过,但我认为问题就在这里,你调用dismiss()。您可能首先需要对 DialogFragment 的引用。我认为从技术上讲,您只是在调用this等于您正在从事的活动的this.dismiss();地方。

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

    if (id == R.id.save) {
        validateForm();
        return true;
    } else if (id == android.R.id.home) {
        // handle close button click here
        dismiss(); // problem is with this call
        return true;
    }

    return super.onOptionsItemSelected(item);
}

你可以尝试这样的事情:

private DetailDialogFragment detailFragment;

private void showCreateDetailDialog() {
    detailFragment = new DetailDialogFragment();
    FragmentManager fragmentManager = getSupportFragmentManager();

    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    transaction.add(android.R.id.content, newFragment).addToBackStack(null).commit(); 
}

现在在里面onOptionsItemSelected()

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

    if (id == R.id.save) {
        validateForm();
        return true;
    } else if (id == android.R.id.home) {
        // handle close button click here
        detailFragment.dismiss();
        return true;
    }

    return super.onOptionsItemSelected(item);
}
于 2016-11-10T15:26:50.560 回答
0

不,我认为这是不可能的,可能是您的设备的问题,在 Android 模拟器或其他设备上进行测试。你能分享你的代码来帮助你吗?

于 2016-10-31T22:56:47.110 回答