从活动移至上一个片段

时间:2019-01-12 13:14:53

标签: java android

我在应用程序中有三个片段。我正在创建,将其称为f1,f2,f3。所有这些都包含在MainActivity中。在第三个片段f3中,我有一个按钮,它将用户带到可以张贴图片的活动。现在,只要发布成功(使用onSuccessListener),我就会显示一条敬酒消息,然后使用意图将用户带到MainActivity。

一切正常,但是我想将用户带到之前的片段f3,而不是使用片段f1启动的MainActivity。我该如何实现?

这是我到目前为止尝试过的:

@Override
public void onBackPressed(){
    finish();
}

//没有起作用

这是当前正在使用的代码

//我的其他代码

PostsRef.child(current_user_id + timesfm).updateChildren(postsMap)
                        .addOnCompleteListener(new OnCompleteListener() {
                            @Override
                            public void onComplete(@NonNull Task task)
                            {
                                if(task.isSuccessful())
                                {
                                    Toast.makeText(PostActivity.this, "Post updated.", Toast.LENGTH_SHORT).show();
                                    loadingBar.dismiss();
                                    SendUserToMain();
                                }
                                else
                                {
                                    Toast.makeText(PostActivity.this, "Error Occured.Please try again.", Toast.LENGTH_SHORT).show();
                                    loadingBar.dismiss();
                                }
                            }
                        });
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

private void SendUserToMain() {
    Intent mIntent = new Intent(PostActivity.this, MainActivity.class);
    mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(mIntent);
}

5 个答案:

答案 0 :(得分:0)

不是在片段中使用startActivity(intent),而是在片段中使用startActivityForResult(intent,requsetCode),并在目标活动中使用setReult(requestCode)finish()方法。

答案 1 :(得分:0)

Code Credit: Nishant

您可以使用startActivityForResult()。 从您的MainActivity开始PostActivity,然后结束MainActivity

Intent intent = new Intent(this, PostActivity.class);
startActivityForResult(intent , 10);
// don't finish..

现在,当您完成PostActivity时,可以通过以下方式转到MainActivity

private void SendUserToMain() {
    Intent intent = new Intent();
    intent.putExtra("frag",3);
    setResult(Activity.RESULT_OK,intent);
    finish();
}

现在进入您的MainActivity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 10) {
        if(resultCode == Activity.RESULT_OK){
            int fragment = data.getIntExtra("frag");
            if (fragment == 3){
                // go to f3
            }
        }
    }
}

答案 2 :(得分:0)

您需要做的而不是调用SendUserToMain();就是调用finish(),因为前一个具有最后一个片段状态的Activity在Backstack上。 目前,您的SendUserToMain();方法中正在创建MainActivity的新实例,该实例将调用其onCreate()方法,并设置Activity为新实例。 >

答案 3 :(得分:0)

您的问题是,为了返回而不是PostActivity中的finish(),您需要使用方法启动新实例

private void SendUserToMain() {
    Intent mIntent = new Intent(PostActivity.this, MainActivity.class);
    mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(mIntent);
}

不要那样做,只要做:

private void SendUserToMain() {
    finish();
}

以完成PostActivity并返回到原始MainActivity实例。当然,这意味着您第一次进入PostActivity()时也会完成MainActivity!

// Sample method of you launching PostActivity, I don't know your actual implementation
void sendUserToPostActivity() {
    Intent mIntent = new Intent(MainActivity.this, PostActivity.class);
    startActivity(mIntent);
    // finish() <-- Don't do that, so your MainActivity remains in the backstack
}

如果您想要更复杂的东西(如在返回结果中添加结果),还可以按照其他人的描述执行startActivityForResult-> setResult例程。

答案 4 :(得分:0)

非常感谢您的帮助,你们都很友善。因此,在@Ore的帮助下,我终于弄清楚了问题出在哪里。结果是从片段f3调用PostActivity时,在意图之后也调用了finish方法。这是我所做的事情

private void SendUserToPostActivity() {
        Intent addPostIntent = new Intent(getActivity(), NewPost.class);
        addPostIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(addPostIntent);
        getActivity().finish();
}

正确的应该是

private void SendUserToPostActivity() {
    Intent addPostIntent = new Intent(getActivity(), NewPost.class);
    startActivity(addPostIntent);
}

然后导航回最新的片段f3,我调用了finish()方法。

@Ore会更好地解释它。 谢谢大家的投入。非常感谢!