如何从其他应用程序返回后从活动中清除片段?

时间:2016-10-21 02:55:33

标签: android android-fragments android-intent

从外部意图返回后从Activity清除片段的最佳方法是什么(例如email / watsapp等) 从隐式意图调用(例如ACTION_SEND)返回后,我有一个我要清除的片段(从backstack清除)。我想清除片段,但我不想关闭活动。 我已经尝试了'getActivity()。onBackPressed()' - 在这种情况下,我的Activity出现在'email / sms'意图被调用之前。 我想从外部意图回来后清除这个片段。

4 个答案:

答案 0 :(得分:1)

您可以在onActivityResult中尝试此代码:

Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);
if(fragment != null) {
    getSupportFragmentManager().beginTransaction().remove(fragment).commit();
}

答案 1 :(得分:0)

尝试在onactivityresult方法中获得任何回调,因为您正在使用startactivityforresult进行发送操作。

答案 2 :(得分:0)

我是这样做的。每当我触发对外部应用程序的意图时,我都会设置一个标志

private static final int REQUEST_INTENT_SENT = 1000;
private boolean intentSent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.send_intent).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
            sendIntent.setType("text/plain");
            startActivityForResult(sendIntent, REQUEST_INTENT_SENT);
            intentSent = true;
        }
    });
}

@Override
protected void onResume() {
    super.onResume();

    if(intentSent){
        intentSent = false;
        //Clear your fragment here
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == REQUEST_INTENT_SENT && resultCode == Activity.RESULT_CANCELED){
        intentSent = false;
    }
}

答案 3 :(得分:0)

试试此代码

FragmentManager fragmentManager = getFragmentManager(); fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);