解散对话框导致活动结束



我的PanelActivity包含一个带有项目列表的recyclerView。每个项目都有一个单击事件。这个点击打开DetailsActivity

DetailsActivity有一个floatingActionButton打开一个全屏对话框(我的类DetailDialogFragment扩展DialogFragment)。

DetailDialogFragment有一个Up/Home键和一个解散

问题:如果用户执行向上按钮,对话框被取消,但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中的Up按钮。

@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);
}

我还没有测试过,但我认为问题在这里,你调用解散()。您可能首先需要一个对DialogFragment的引用。我认为技术上你只是调用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);
}

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

相关内容

  • 没有找到相关文章

最新更新