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