2015-10-19 46 views
0

我有一個應用程序,它從Web服務加載提要。 Uuntil的飼料加載我顯示一個對話框說:「請稍候...」。 我想顯示一個Circle ProgressBar創建一個圓ProgressBar

什麼我顯示 current

我想要什麼顯示 desired

public class M { 
    static ProgressDialog pDialog; 
    private static SharedPreferences mSharedPreferences; 

    public static void showLoadingDialog(Context mContext) { 
     pDialog = new ProgressDialog(mContext); 
     pDialog.setMessage(mContext.getString(R.string.please_wait)); 
     pDialog.setIndeterminate(true); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
} 

的活動,顯示進度對話框

public class HomeFragment extends Fragment implements OnClickListener { 
    public RecyclerView postsList; 
    public View mView; 
    public FloatingActionButton mFabButton; 
    public Toolbar toolbar; 
    public Intent mIntent; 
    public LinearLayoutManager layoutManager; 
    int currentPage = 1; 
    private HomeListAdapter mHomeListAdapter; 

    private SwipeRefreshLayout mSwipeRefreshLayout; 

    private CacheManager mCacheManager; 
    private Gson mGson; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     mCacheManager = CacheManager.getInstance(getActivity().getApplicationContext()); 
     mGson = new Gson(); 

     mView = inflater.inflate(R.layout.fragment_home, container, false); 
     initializeView(); 
     ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(R.string.title_home); 
     ((AppCompatActivity) getActivity()).getSupportActionBar().setShowHideAnimationEnabled(true); 
     getPosts(true); 
     return mView; 
    } 

    private void initializeView() { 
     postsList = (RecyclerView) mView.findViewById(R.id.postsList); 
     mFabButton = (FloatingActionButton) mView.findViewById(R.id.fabButton); 
     mFabButton.setOnClickListener(this); 
     mFabButton.setRippleColor(getActivity().getResources().getColor(R.color.accentColor)); 
     //layout manager 
     layoutManager = new LinearLayoutManager(getActivity().getApplicationContext()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     postsList.setLayoutManager(layoutManager); 
     mHomeListAdapter = new HomeListAdapter(getActivity(), new ArrayList<PostsItem>()); 
     postsList.setAdapter(mHomeListAdapter); 
     mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.swipeHome); 

     mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 

      @Override 
      public void onRefresh() { 
       setCurrentPage(1); 
       getPosts(false); 
      } 
     }); 
     //setting up our OnScrollListener 
     postsList.addOnScrollListener(new HidingScrollListener(layoutManager) { 
      @Override 
      public void onHide() { 
       FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mFabButton.getLayoutParams(); 
       int fabBottomMargin = lp.bottomMargin; 
       mFabButton.animate().translationY(mFabButton.getHeight() + fabBottomMargin).setInterpolator(new AccelerateInterpolator(2)).start(); 
      } 

      @Override 
      public void onShow() { 
       mFabButton.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); 
      } 

      @Override 
      public void onLoadMore(int currentPage) { 

       setCurrentPage(currentPage); 
       getPosts(false); 
      } 
     }); 
    } 

    @Override 
    public void onDestroy() { 
     super.onResume(); 
     M.hideLoadingDialog(); 
    } 

    public void getPosts(boolean isMain) { 

     if (M.isNetworkAvailable(getActivity().getApplicationContext())) { 
      if (isMain) { 

       M.showLoadingDialog(getActivity()); 
      } 
      PostsAPI mPostsAPI = APIService.createService(PostsAPI.class, M.getToken(getActivity())); 
      mPostsAPI.getPosts(getCurrentPage(), new Callback<List<PostsItem>>() { 
       @Override 
       public void success(List<PostsItem> postsItems, retrofit.client.Response response) { 
        if (postsItems.size() == 0) { 

        } else { 
         try { 
          mCacheManager.write(mGson.toJson(postsItems), "Posts-" + getCurrentPage() + ".json"); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
        updateView(postsItems); 
       } 

       @Override 
       public void failure(RetrofitError error) { 
        M.T(getActivity(), getString(R.string.ServerError)); 
        M.hideLoadingDialog(); 
       } 
      }); 

     } else { 
      try { 
       String Posts = mCacheManager.readString("Posts-" + getCurrentPage() + ".json"); 
       Gson mgson = new Gson(); 
       updateView((List<PostsItem>) mgson.fromJson(Posts, new TypeToken<List<PostsItem>>() { 
       }.getType())); 

      } catch (Exception e) { 
//    M.L(e.getMessage()); 
      } 
     } 
    } 

    private void showWelcomeMessage() { 
     mView.findViewById(R.id.welcomePanel).setVisibility(View.VISIBLE); 
     postsList.setVisibility(View.GONE); 
    } 

    private void updateView(List<PostsItem> postsItems) { 

     if (getCurrentPage() != 1) { 
      List<PostsItem> oldItems = mHomeListAdapter.getPosts(); 
      if (oldItems.size() == 0 && postsItems.size() == 0) { 
       showWelcomeMessage(); 
      } 
      oldItems.addAll(postsItems); 
      mHomeListAdapter.setPosts(oldItems); 
     } else { 
      if (postsItems.size() == 0) { 
       showWelcomeMessage(); 
      } 
      mHomeListAdapter.setPosts(postsItems); 
     } 
     if (mSwipeRefreshLayout.isRefreshing()) { 
      mSwipeRefreshLayout.setRefreshing(false); 
     } 
     M.hideLoadingDialog(); 
    } 

    @Override 
    public void onClick(View v) { 
     if (v.getId() == R.id.fabButton) { 
      mIntent = new Intent(getActivity(), PublishActivity.class); 
      startActivity(mIntent); 
     } 
    } 

    public int getCurrentPage() { 
     return currentPage; 
    } 

    public void setCurrentPage(int currentPage) { 
     this.currentPage = currentPage; 
    } 
} 
+1

那麼,你想顯示一個ProgressBar而不是ProgressDialog? –

+1

試試這個: http://stackoverflow.com/questions/27213381/how-to-create-circular-progressbar-in-android – galvan

+0

是的,我認爲是正確的 –

回答

0

你表示一方是ProgressDialog和你想要顯示的是ProgressBar

你需要在你的佈局是這樣的一個進度:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ProgressBar 
     android:id="@+id/progressbar" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:visibility="gone" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
     <!-- your entire layout here --> 
    </LinearLayout> 

</RelativeLayout> 

則可以顯示或隱藏從Java這樣佈局的進度條和/或休息:

秀:

findViewById(R.id.progressbar).setVisibility(View.VISIBLE); 

隱藏:

findViewById(R.id.progressbar).setVisibility(View.GONE); 
+0

我應該怎樣處理java代碼? –

+0

當你想顯示或隱藏進度條而不是調用'showLoadingDialog'函數時,你可以調用它。 –

+0

我試着實現你的方法,但失敗了,我應該發佈我的整個代碼? –