更改片段时显示ProgressBar - Android

时间:2016-07-13 09:27:42

标签: java android xamarin android-asynctask android-progressbar

我的应用内部有一个片段可以完成很多后台工作,因此需要很长时间才能加载。我想从我的主要活动中显示一个ProgressBar,并在片段加载后隐藏它。

问题是,由于整个用户界面冻结,进度条无法显示,或者卡住了。

如何在片段加载时显示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;

    }

BookFragment:

        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解析文档,这也需要很长时间。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

每当片段更改时,请尝试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();

希望这会对你有所帮助。

答案 2 :(得分:0)

首先,您需要发布部分代码。

  

如何在片段加载时显示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
    }
} 
相关问题