在DIALOG中单击“确定”后,重新加载或刷新当前片段

时间:2018-03-29 19:38:06

标签: java android android-fragments android-fragmentactivity

这是我的对话框内部片段它工作正常,现在我想要当我点击“确定”按钮它重新加载当前片段。调用方法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();

2 个答案:

答案 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();
        }
    }
}