Android-使用多个选项卡在活动中获取Fragment实例



我在引用"活动"中已实例化的片段时遇到问题。

我有两个选项卡作为操作栏的一部分,对于每个选项卡,我都实例化同一片段的一个实例。。。。

片段=播放器

Tab1=玩家1(玩家片段,包含玩家1的DB中的详细信息)Tab2=播放器2(播放器片段,详细信息来自播放器2的DB)

玩家片段包括一个可以使用数字选择器修改的字段(已玩游戏)。所以…我创建了一个接口,并在我的活动中实现了这个接口。当点击片段按钮时,它会调用界面,该界面在活动中创建一个对话框片段来显示数字选择器。一旦数字选择器关闭并将玩过的游戏数量传回活动,我就想在正确的片段上更新这个值(因此,如果按下了选项卡2上的按钮,那么Player2上的值应该会更新。)

这就是我画空白的地方。

我使用actionBar.addTab添加每个选项卡,并使用实现actionBar.TabListener的TabsListener类在按下每个选项卡时替换正确的Fragment。ActionBar为您处理FragmentManager的内容。。。我认为我在活动中需要做的是获取当前片段,这样我就可以调用该片段中的方法来更新它。但是当通过TabListener添加片段时,我看不到可以获取和存储片段实例的ID或为其设置标签的方法。如果可以,我可以使用getFragmentByID或getFragmentByTag来查找它。

关于我该怎么做的任何想法。


我认为我有一个完全不同的解决方案,通过在数字选择器中更新数据库,然后在DialogFragment关闭时简单地让onResume()更新我的Visible Fragment中的值,但在DialogFraction关闭时似乎没有调用onResumee()。

我没有发布代码示例,因为我希望上面的内容能简化问题。

FragmentTransaction的'add'和'replace'方法都有许多重载。使用带参数的:

(int containerViewId, Fragment fragment, String tag)

允许您为片段提供一个标记名称,随后可以通过调用findFragmentByTag来检索该片段。

您可以指定TabListener(http://developer.android.com/reference/android/app/ActionBar.TabListener.html)并在重新选择选项卡时得到通知,在这里您可以更新UI。

在我看来,您应该在用户从对话框中选择值后更新数据库。您可以为对话框上的不同按钮指定OnClickListener,并在选择或取消某项操作时收到通知。

示例位于http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog,

public static class MyAlertDialogFragment extends DialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}

}

最新更新