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