当前位置: 首页 > 知识库问答 >
问题:

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

戚翰飞
2023-03-14

这是我在片段内的对话框,它工作正常,现在我希望当我单击“确定”按钮时,它会重新加载当前片段。当调用showDialog方法时,将显示该对话框:mi fragment是android。支持v4。应用程序。碎片

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个答案

宋铭
2023-03-14

没有标准的方法来重现碎片。片段没有类似于活动的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再次执行此操作。

注意:不要在初始化时使用onCreateView()方法。为了达到这些目的,最好使用onViewCreated(View-View,Bundle-savedState)方法。

仲高超
2023-03-14

当片段对用户可见时刷新片段

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
    super.setUserVisibleHint(isVisibleToUser)
    if(isVisibleToUser){
        if (getFragmentManager() != null) {
            getFragmentManager()
                ?.beginTransaction()
                ?.detach(this)
                ?.attach(this)
                ?.commit();
        }
    }
}
 类似资料:
  • 这是我的对话里面的片断,它工作良好,现在我想当我点击“确定”按钮,它重新载入当前的片断。调用showDialog方法时显示对话框:mi fragment is android.support.v4.app.fragment 更新这是片段。我想回顾片段的onCreateView方法 使用viewpager和FragmentPagerAdapter测试

  • 我遇到了一个如何在对话框片段中更新片段的问题。 当我单击过滤器菜单按钮时,会显示一个新的对话框片段,其中包括一个无线电组。 我想在单击ok按钮时更新包含位置列表的片段。 它是PlaceActive的代码,其中包含PlaceFraank: 公共类PlaceActive扩展AppCompatActive{ } 以下是PlaceFragment类的代码: 公共类PlaceFragment扩展了片段{ }

  • 问题内容: 我正在使用Java进行项目,因此需要在单击特定按钮后重新加载整个程序。这该怎么做? 问题答案: 尝试 如果仍然无法使用,请在完成上述步骤后尝试

  • 问题内容: 这是一个非常基本的问题-但我无法通过在线搜索找到答案。 我正在使用python控制ArcGIS,并且有一个简单的python脚本,该脚本调用了一些预先编写的代码。 但是,当我对预写代码进行更改时,它似乎没有导致任何更改。我导入了此模块,并尝试刷新它,但是没有任何反应。 我什至将它调用的文件移到了另一个位置,脚本仍然可以正常工作。昨天我做的一件事是我将所有python文件都添加到sys路

  • 问题内容: 当用户访问未经授权的个人页面(例如个人资料)时,我的后端302重定向到控制器操作,该操作代替部分个人资料来提供登录部分。由于它302重定向到返回部分操作的动作,因此URL地址栏与用户尝试访问的页面(“ / profile”)没有变化。 我本来打算“修复”该问题,但实际上我认为它可以提供良好的用户体验,而不是将返回网址作为查询参数来处理。 想法是一旦他们登录,我只想重新加载当前路由,也可

  • 我想在注销后刷新/重新加载页面(屏幕上的消息在5秒钟内可见)。当前代码不会刷新它,所以我仍然在标题中看到用户名,而不是像登录按钮这样的东西。 我已经检查了这篇文章,但没有什么变化。