这是我的对话框内部片段它工作正常,现在我想要当我点击“确定”按钮它重新加载当前片段。调用方法showDialog时显示对话框: mi片段是android.support.v4.app.Fragment
void showDialog() {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
View promptView = layoutInflater.inflate(R.layout.dialog_fragment_agenda, null);
TextView txtNombre = (TextView)promptView.findViewById(R.id.txtdialog1);
txtNombre.setText("ADD THIS STUFF?");
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
alertDialogBuilder.setView(promptView);
alertDialogBuilder.setPositiveButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
sendSomeStuff();
//HERE TODO RELOAD OR REFRESH THE FRAGMENT
}
});
alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
} });
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}
更新 这是片段。我想回忆一下片段的onCreateView方法
public class FragmentOne extends Fragment {
//...some variables
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_one, container, false);
showDialog()//HERE I CALL MY CUSTOM DIALOG
return rootView;
}
}
简单解决方案
使用viewpager和FragmentPagerAdapter
进行测试FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(FragmentOne.this).attach(FragmentOne.this).commit();
答案 0 :(得分:0)
没有重新创建片段的标准方法。片段没有像Activity那样的recreate()
方法。与活动不同,实例由系统创建,碎片由开发人员创建(意味着你)。所以你有两种方式:
方式#1重新创建片段实例(不推荐)
如果要再次调用onCreateView()方法,可以再次运行相同的事务来重新创建片段实例:
FragmentOne fg = new FragmentOne();
fg.setArguments(yourArgsBundle);
getFragmentManager() // or getSupportFragmentManager() if your fragment is part of support library
.beginTransaction()
.replace(R.id.yourRootView, fg)
.commit();
不推荐这种方式,因为这会导致内容视图重新翻译,并且视图树会重新重建。
方式#2更新当前片段实例
更简单,更推荐的方法是根据您的新json简单地更新您的视图:
如果更改了文字TextView
,请再次致电myTextView.setText("new data");
。如果它是ImageView
,其中源图像已更改,请再次致电myImageView.setImageBitmap(myNewBitmap)
。
您已经根据您的json初步确定了您的视图。所以只需用新的json再次这样做。
P.S。不要在初始化目的中使用onCreateView()
方法。在这些目的中更好地使用onViewCreated(View view, Bundle savedState)
方法。
答案 1 :(得分:0)
在用户可见片段时刷新片段
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if(isVisibleToUser){
if (getFragmentManager() != null) {
getFragmentManager()
?.beginTransaction()
?.detach(this)
?.attach(this)
?.commit();
}
}
}