更改片段时显示 ProgressBar - Android

     2023-05-07     216

关键词:

【中文标题】更改片段时显示 ProgressBar - Android【英文标题】:Show ProgressBar when changing fragment - Android 【发布时间】:2016-11-15 19:20:37 【问题描述】:

我的应用程序中有一个片段,它执行大量后台工作,因此需要很长时间才能加载。我想在我的 Main Activity 中显示一个 ProgressBar,并在加载片段后将其隐藏。

问题是,进度条不显示,或者卡住了,因为整个 UI 冻结了。

如何在片段加载时显示 ProgressBar? 谢谢。

编辑:片段内的代码:

  public override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        // Create your fragment here

        fragments = new Fragment[]
       
           new HalachotFragment(),
           new BooksFragment(),
       ;

        var titles = CharSequence.ArrayFromStringArray(new[]
       
                "הלכות",
                "ספרים",
        );

        tabsAdapter = new TabsFragmentPagerAdapter(ChildFragmentManager, fragments, titles);

    

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    
        // Use this to return your custom view for this Fragment

        var view = inflater.Inflate(Resource.Layout.HalachaSection, container, false);

        //var progressBar = Activity.FindViewById<ProgressBar>(Resource.Id.progressBar);

        halachotPager = view.FindViewById<ViewPager>(Resource.Id.halachotPager);

        halachotPager.Adapter = tabsAdapter;
        halachotPager.OffscreenPageLimit = 2;
        halachotPager.SetCurrentItem(1, true);
        // Bind the tabs to the ViewPager
        tabs = Activity.FindViewById<TabLayout>(Resource.Id.tabs);

        tabs.SetupWithViewPager(halachotPager);
        //var toolbar = Activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        tabs.Visibility = ViewStates.Visible;

        //progressBar.Visibility = ViewStates.Gone;
        return view;

    

书片段:

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);
        View view = inflater.Inflate(Resource.Layout.Books, container, false);

        mRecyclerView = view.FindViewById<RecyclerView>(Resource.Id.booksRecyclerView);
        mRecyclerView.NestedScrollingEnabled = false;

        mBooks = new List<Book>();
        ImageView cover = new ImageView(Activity);
        //cover = view.FindViewById<ImageView>(Resource.Id.coverImage);
        cover.SetImageResource(Resource.Drawable.Torat_Hamachane1);
        mBooks.Add(new Book()  Title = "תורת המחנה א' - הלכות יום ויום", Cover = cover, imageResourceId = Resource.Drawable.Torat_Hamachane1); 

        //Create our layout manager
        mLayoutManager = new GridLayoutManager(Activity, 2);
        mLayoutManager.AutoMeasureEnabled = true;
        //mRecyclerView.SetForegroundGravity(GravityFlags.CenterHorizontal);
        mRecyclerView.SetLayoutManager(mLayoutManager);
        SimpleItemAnimator x = null;

        mRecyclerView.SetItemAnimator(x);
        mAdapter = new RecyclerAdapter(mBooks, mRecyclerView, Activity);
        mRecyclerView.SetAdapter(mAdapter);
        cover = new ImageView(Activity);
        cover.SetImageResource(Resource.Drawable.kitzurTHM);
        mBooks.Add(new Book()  Title = "קיצור תורת המחנה - הלכות יום ויום ושבת", Cover = cover, imageResourceId = Resource.Drawable.kitzurTHM, Content = "KitzurTHM/KitzurTHMFull.html" );

        cover = new ImageView(Activity);
        ImageView newCover = new ImageView(Activity);
        newCover.SetImageResource(Resource.Drawable.halkasPurim);
        mBooks.Add(new Book()  Title = "הלכה כסדרה - הלכות פורים", Cover = newCover, imageResourceId = Resource.Drawable.halkasPurim );

        cover = new ImageView(Activity);
        cover.SetImageResource(Resource.Drawable.halkasPesach);
        mBooks.Add(new Book()  Title = "הלכה כסדרה - הלכות פסח", Cover = cover, imageResourceId= Resource.Drawable.halkasPesach );

        cover = new ImageView(Activity);
        cover.SetImageResource(Resource.Drawable.netzach);
        mBooks.Add(new Book()  Title = "שו\"ת נצח יהודה", Cover = cover , imageResourceId = Resource.Drawable.netzach);

        cover = new ImageView(Activity);
        cover.SetImageResource(Resource.Drawable.tankim);
        mBooks.Add(new Book()  Title = "טיפול בטנקים בשבת", Cover = cover , imageResourceId = Resource.Drawable.tankim);

        cover = new ImageView(Activity);
        cover.SetImageResource(Resource.Drawable.tipulBeChalalim);
        mBooks.Add(new Book()  Title = "טיפול בחללים בשבת", Cover = cover , imageResourceId = Resource.Drawable.tipulBeChalalim, Content = "TipulBechalalimShabbat.html" );

        Refresh();
        return view;

    

HalachotFragment 解析一个文档,这也使得它需要很长时间。

【问题讨论】:

在此处发布您的代码 您是否使用 asynctask 进行后台工作? 因为整个 UI 都冻结了。意味着不在工作线程中工作?显示部分代码 哪个代码?碎片里面?还是交易?? @amitairos: 由于 Fragment 加载需要时间而产生的代码 【参考方案1】:

您现在可以在主活动中使用 ProgressBar 并将 Progressbar 对象设为静态,只要您更改片段显示该进度条并且当您的片段加载时隐藏该进度条。

【讨论】:

对不起,我不太明白你的意思。【参考方案2】:

每当 Fragment 发生变化时,尝试runOnUiThread 作为以下代码,

runOnUiThread(new Runnable() 

    @Override
    public void run() 
        // TODO Auto-generated method stub

        ProgressDialog pd = new ProgressDialog(Activity.this);
        pd.setMessage("Testing...");
        pd.show();

    
); 

如果你想隐藏ProgressDialog 表示使用,

pd.hide();

希望这对你有帮助。

【讨论】:

谢谢。您能否看看我的代码并告诉我如何使用 Async 使其不会冻结 UI?另外,我应该把这段代码放在哪里?分片交易后?【参考方案3】:

首先你需要发布一些代码。

如何在片段加载时显示 ProgressBar?

当您从活动中调用片段时,将调用片段的onAttach() 方法。因此,那时您需要在该方法中获取您的活动对象引用。喜欢,

MainActivity mainActivity; // this should be global
@Override
public void onAttach(Activity activity) 
    // TODO Auto-generated method stub
    super.onAttach(activity);
    mainActivity = (MainActivity)activity;

因此,使用活动对象,您可以访问进度条对象并将其隐藏在 setUserVisibleHint() 方法中,在该方法中片段将被完全加载。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) 
    // TODO Auto-generated method stub
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) 
      // hide progress bar
    
 

【讨论】:

谢谢。能否请您看一下我的代码并告诉我如何使用 Async 使其不会冻结 UI?

java示例代码_连接更改时显示toast

java示例代码_连接更改时显示toast 查看详情

加载 iframe 并更改其源时显示加载符号?

】加载iframe并更改其源时显示加载符号?【英文标题】:ShowloadingsymbolwheniframegetsloadedANDchangesitssource?【发布时间】:2018-01-0620:27:12【问题描述】:我想在iframe加载时显示loading.gif。我用我在这里找到的代码做到了这一点:Showaloadi... 查看详情

javascriptlinkedin已更改导出为pdf时显示您的个人资料的哪些部分。这个脚本是一个创造更好的粗略尝试(代码片段)

查看详情

当表单中没有任何更改时显示警报框

】当表单中没有任何更改时显示警报框【英文标题】:alertboxshownwhennothingchangesaredoneinform【发布时间】:2014-06-0305:21:20【问题描述】:当使用此插件的表单没有进行任何更改并且当用户退出表单时,它仍然显示未保存更改的警报... 查看详情

在 C# 中做一些工作时显示进度条?

】在C#中做一些工作时显示进度条?【英文标题】:DisplayprogressbarwhiledoingsomeworkinC#?【发布时间】:2010-12-2911:03:53【问题描述】:我想在做一些工作时显示一个进度条,但这会挂起UI并且进度条不会更新。我有一个带有ProgressBar的W... 查看详情

如何更改启动时显示的默认 SKScene

】如何更改启动时显示的默认SKScene【英文标题】:HowtochangethedefaultSKScenethatdisplaysonstartup【发布时间】:2017-02-0811:21:46【问题描述】:我一直在开发一款在XCode创建的单一默认GameScene中完成的游戏。现在我想添加更多屏幕,包括... 查看详情

从库中复制文件时显示 ProgressDialog

...切都很好。我想在用户选择视频(在图库中)后立即显示ProgressBar,然后在文件完成复制后显示progresbar.di 查看详情

从后面的代码更改时显示文本框文本

】从后面的代码更改时显示文本框文本【英文标题】:showtextboxtextwhenitchangefromcodebehind【发布时间】:2016-10-1716:16:24【问题描述】:目前,我正在开发客户端聊天服务器应用程序,当收到来自任何朋友的消息时,它必须显示在文... 查看详情

在更改时显示kivy滑块值[关闭]

】在更改时显示kivy滑块值[关闭]【英文标题】:Displaykivyslidervalueasitchanges[closed]【发布时间】:2014-05-1406:33:48【问题描述】:我想知道是否可以将kivy微调器值显示为移动标签,以便用户确切知道滑块的当前值是什么。谢谢【问题... 查看详情

在更改数据源时显示子行

】在更改数据源时显示子行【英文标题】:ShowingChildRowonChangingDatasource【发布时间】:2017-01-2815:50:04【问题描述】:使用:-DataTables1.10.12;ASP.NET;您好!这个工具很棒!自从我找到它以来,我一直很享受它。我在使用ChildRows时遇... 查看详情

VB.net DataGridView 更改数据时显示不正确

】VB.netDataGridView更改数据时显示不正确【英文标题】:VB.netDataGridViewincorrectdisplaywhenchangedata【发布时间】:2014-11-0415:52:31【问题描述】:我将下面的代码放在ComboBox1.SelectedIndexChanged上,第一次没问题,但是如果我更改组合的值,... 查看详情

如何在路由更改时显示来自 db 的数据?

】如何在路由更改时显示来自db的数据?【英文标题】:Howdoidisplaydatafromdbonaroutechange?【发布时间】:2021-01-0307:34:49【问题描述】:我正在vue.js+firebase中开发一个类似Messenger的应用程序。我想做的是-在每次路由更改时,从db中获... 查看详情

更改在 Android 中按下概览按钮时显示的 Flutter 图标

】更改在Android中按下概览按钮时显示的Flutter图标【英文标题】:ChangeFluttericonthatshowswhenOverviewbuttonpressedinAndroid【发布时间】:2019-01-0506:18:33【问题描述】:我执行了FlutterLauncherIcons程序,它运行良好,所有应用程序图标都已更... 查看详情

在下拉更改时显示 Bootstrap 模态表单,并在插入数据库后选择该值

】在下拉更改时显示Bootstrap模态表单,并在插入数据库后选择该值【英文标题】:ShowBootstrapmodalformondropdownchangeandgetthatvalueselectedafterinsertingintoDatabase【发布时间】:2020-02-2023:56:45【问题描述】:我有一个包含2个Select2元素的表单... 查看详情

更改通过python发送电子邮件时显示的名称?

】更改通过python发送电子邮件时显示的名称?【英文标题】:Changingthenamethatisdisplayedwhensendinganemailthroughpython?【发布时间】:2021-01-0106:01:26【问题描述】:我将向.csv中列出的一群人发送一封电子邮件,其中包含使用python的html图... 查看详情

在没有文件路径的 Access 中组合框更改时显示不同的图像

】在没有文件路径的Access中组合框更改时显示不同的图像【英文标题】:DisplayadifferentimageoncomboboxchangeinAccesswithoutfilepaths【发布时间】:2014-12-1009:56:01【问题描述】:我正在创建一个包含组合框的表单,假设它称为“Postcode_cb”... 查看详情

在 Woocommerce 中选择的运输方式更改时显示或隐藏 html 元素

】在Woocommerce中选择的运输方式更改时显示或隐藏html元素【英文标题】:ShoworhidehtmlelementonchosenshippingmethodchangeinWoocommerce【发布时间】:2019-01-1507:33:48【问题描述】:我正在尝试根据所选的运输方式显示/隐藏结帐页面中的一些元... 查看详情

在更改网格视图以链接 xml 布局时显示 log cat 错误

】在更改网格视图以链接xml布局时显示logcat错误【英文标题】:onchangestogridviewtolinkxmllayoutshowslogcaterror【发布时间】:2013-12-1006:17:04【问题描述】:我已经用新的错误更改了日志猫。Log-cat错误再次显示相同的错误,并且模拟器在... 查看详情