2016-07-13 40 views
1

我的應用程序中有一個片段,它執行大量後臺工作,因此需要很長時間才能加載。我想從我的主要活動中顯示ProgressBar,並在片段加載後隱藏它。更改片段時顯示ProgressBar - Android

問題是,由於整個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; 

    } 

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解析文件,這也使得它需要很長的時間。

+0

在此處張貼您的代碼 –

+0

您是否在使用asynctask進行後臺工作? – comeback4you

+0

由於整個UI凍結。意味着沒有在工作中工作線程?顯示部分代碼 –

回答

0

您可以在您的主要活動中使用ProgressBar,並且每當您更改片段時顯示進度欄以及加載片段時隱藏該進度欄,即可立即使進度條對象變爲靜態。

+0

對不起,但我不太明白你的意思。 – amitairos

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(); 

希望這可以幫助你。

+0

謝謝。你能看看我的代碼,並告訴我如何使用異步,使其不凍結的用戶界面?另外,我應該在哪裏放這個代碼?片段交易後? – amitairos

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 
    } 
} 
+0

謝謝。你能看看我的代碼,並告訴我如何使用異步,使其不凍結的用戶界面? – amitairos