创建Circle ProgressBar

时间:2015-10-19 13:11:41

标签: android android-progressbar

我有一个从网络服务加载Feed的应用。 Uuntil已加载Feed我显示一个Dialog说"请等待......"。 我想改为显示 Circle 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 个答案:

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

然后你可以像这样显示或隐藏你的布局的进度条和/或其余部分:

显示:

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

隐藏:

findViewById(R.id.progressbar).setVisibility(View.GONE);
相关问题