我在应用程序中有三个片段。我正在创建,将其称为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);
}
答案 0 :(得分:0)
不是在片段中使用startActivity(intent),而是在片段中使用startActivityForResult(intent,requsetCode),并在目标活动中使用setReult(requestCode)和finish()方法。
答案 1 :(得分:0)
您可以使用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会更好地解释它。 谢谢大家的投入。非常感谢!