Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个活动调用现有活动的方法';s片段_Java_Android_Android Fragments - Fatal编程技术网

Java 从另一个活动调用现有活动的方法';s片段

Java 从另一个活动调用现有活动的方法';s片段,java,android,android-fragments,Java,Android,Android Fragments,我有一个片段HostEditFragment,它由activityHostEditActivity加载。当我在片段中完成编辑后,我想调用MainActivity上的一个方法。目前,我正试图使用界面和意图来实现它,但它启动了一个新的main活动,似乎不起作用 只是想知道有没有更好的方法 我认为它正在创建一个新的MainActivity,而不是使用现有的SfnViewerFragment返回为null。我需要它是现有的main活动和SfnViewerFragment 这里有一些骨架代码,你可以看看我

我有一个片段
HostEditFragment
,它由activity
HostEditActivity
加载。当我在片段中完成编辑后,我想调用
MainActivity
上的一个方法。目前,我正试图使用
界面和
意图来实现它,但它启动了一个新的
main活动
,似乎不起作用

只是想知道有没有更好的方法

我认为它正在创建一个新的
MainActivity
,而不是使用现有的
SfnViewerFragment
返回为null。我需要它是现有的
main活动
SfnViewerFragment

这里有一些骨架代码,你可以看看我试过什么

HostEditFragment:

public class HostEditFragment extends Fragment {
    OnViewerEditedListener callback;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            callback = (OnViewerEditedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                + " must implement OnViewerEditedListener");
        }
    }

    public void saveHost() {
    //...
        callback.onViewerEdited(id);

    }

    public interface OnViewerEditedListener {
        public void onViewerEdited(Long id);
    }
}
招待活动:

public class HostEditActivity extends ActionBarActivity implements HostEditFragment.OnViewerEditedListener {
    public void onViewerEdited(Long id) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("id", id);
        startActivity(intent);
    }
}
主要活动:

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri data = getIntent().getData();
        Uri viewerUri;
        if (data != null) {
            //....
        } else {
            Long id = getIntent().getLongExtra("id", -1);
            if (id != -1) {
                onViewerEdited(id);
            }
        }

    public void onViewerEdited(Long id) {
        SfnViewerFragment sfnViewerFragment = (SfnViewerFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":0");
        sfnViewerFragment.recreateWebView(id);

        viewPager.setCurrentItem(0, true);
    }
}

首先,您需要使用MainActivity中的startActivityForResult方法启动HostEditActivity,当您完成编辑后,需要setResult about Edit(到数据意图)并返回MainActivity,然后选中have a change(有更改)或no(否)。这里您可以阅读如何使用:这里还有额外的示例:您是否考虑过在意图上设置标志,向安卓发出信号,你想重复使用你的活动,而不是重新创建它?@Aster我该怎么做?我主要是一个iOS开发人员,在这里有点迷路了!hahaSee文档。它告诉了你很多关于Android的活动栈。以及您可以根据意图设置的标志“FLAG_ACTIVITY_NEW_TASK”、“FLAG_ACTIVITY_CLEAR_TOP”和“FLAG_ACTIVITY_SINGLE_TOP”。您需要首先从MainActivity使用startActivityForResult方法启动HostEditActivity,完成编辑后需要setResult关于编辑(到数据意图)返回MainActivity,然后检查是否有更改。这里您可以阅读如何使用:这里还有额外的示例:您是否考虑过在您的意图上设置标志,以向Android发出信号,表示您希望重用您的活动,而不是重新创建它?@Aster我该怎么做?我主要是一个iOS开发人员,在这里有点迷路了!hahaSee文档。它告诉了你很多关于Android的活动栈。以及“FLAG_ACTIVITY_NEW_TASK”、“FLAG_ACTIVITY_CLEAR_TOP”和“FLAG_ACTIVITY_SINGLE_TOP”标志,您可以根据自己的意图设置这些标志。