我在我的Activity中引用已经实例化的Fragment时遇到了问题。
我有两个标签作为操作栏的一部分,每个标签我都在实例化同一个片段的实例....
Fragment = Player
Tab1 = Player1(播放器片段包含播放器1的DB中的详细信息) Tab2 = Player2(播放器片段包含来自播放器2的DB的详细信息)
播放器片段包括可使用数字选择器修改的字段(已播放的游戏)。 所以......我已经创建了一个我在我的活动中实现的界面。当在Fragment上单击按钮时,它会调用活动上创建Dialog Fragment的界面以显示数字选择器。一旦数字选择器被关闭并传回游戏的数量,我就想在正确的片段上更新这个值(因此,如果在选项卡2上按下该按钮,那么Player2上的值应该更新。)
这是我画空白的地方。
我正在使用actionBar.addTab添加每个选项卡,并使用TabsListener类实现ActionBar.TabListener,以便在按下每个选项卡时替换正确的Fragment。 ActionBar为你处理FragmentManager的东西...... 我认为我需要在我的Activity中做的是获取当前片段,以便我可以调用此片段中的方法来更新它。但是当通过TabListener添加片段时,我看不到一种方法,我可以获取并存储片段实例的ID或为其设置标记。如果可以,那么我可以使用getFragmentByID或getFragmentByTag来查找它。
关于我应该如何做的任何想法。
我认为我有一个完全不同的解决方案,我通过数字选择器本身的数据库更新,然后简单地让onResume()在DialogFragment关闭时更新我的可见片段中的值,但似乎没有调用onResume() DialogFragment关闭时。
我没有发布代码示例,因为我希望上面简化了这个问题。
答案 0 :(得分:1)
FragmentTransaction的'add'和'replace'方法都有许多重载。使用带参数的那个:
(int containerViewId, Fragment fragment, String tag)
...允许您为片段提供标记名称,随后可以通过调用findFragmentByTag来检索它。
答案 1 :(得分:0)
您可以指定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();
}
}