package com.yaoyumeng.v2ex.ui.fragment; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.twotoasters.jazzylistview.effects.FadeEffect; import com.twotoasters.jazzylistview.recyclerview.JazzyRecyclerViewScrollListener; import com.yaoyumeng.v2ex.Application; import com.yaoyumeng.v2ex.R; import com.yaoyumeng.v2ex.api.HttpRequestHandler; import com.yaoyumeng.v2ex.api.V2EXManager; import com.yaoyumeng.v2ex.model.NotificationModel; import com.yaoyumeng.v2ex.model.ProfileModel; import com.yaoyumeng.v2ex.ui.adapter.HeaderViewRecyclerAdapter; import com.yaoyumeng.v2ex.ui.adapter.NotificationsAdapter; import com.yaoyumeng.v2ex.ui.widget.DividerItemDecoration; import com.yaoyumeng.v2ex.ui.widget.FootUpdate; import com.yaoyumeng.v2ex.utils.AccountUtils; import com.yaoyumeng.v2ex.utils.MessageUtils; import com.yaoyumeng.v2ex.utils.OnScrollToBottomListener; import java.util.ArrayList; /** * 显示单个节点下的话题或最新/最热话题类 */ public class NotificationFragment extends BaseFragment implements HttpRequestHandler<ArrayList<NotificationModel>>, OnScrollToBottomListener { public static final String TAG = "NotificationFragment"; RecyclerView mRecyclerView; HeaderViewRecyclerAdapter mHeaderAdapter; NotificationsAdapter mAdapter; SwipeRefreshLayout mSwipeLayout; TextView mEmptyText; boolean mIsLoading; RecyclerView.LayoutManager mLayoutManager; boolean mNoMore = false; int mPage = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new NotificationsAdapter(getActivity(), this); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_notification, container, false); mRecyclerView = (RecyclerView) rootView.findViewById(R.id.notification_listview); mLayoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(mLayoutManager); mHeaderAdapter = new HeaderViewRecyclerAdapter(mAdapter); mRecyclerView.setAdapter(mHeaderAdapter); mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); if (Application.getInstance().isShowEffectFromCache()) { JazzyRecyclerViewScrollListener scrollListener = new JazzyRecyclerViewScrollListener(); mRecyclerView.setOnScrollListener(scrollListener); scrollListener.setTransitionEffect(new FadeEffect()); } mEmptyText = (TextView) rootView.findViewById(R.id.txt_fragment_notification_empty); mFootUpdate.init(mHeaderAdapter, LayoutInflater.from(getActivity()), new FootUpdate.LoadMore() { @Override public void loadMore() { requestMoreNotifications(); } }); mSwipeLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_container); mSwipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { mPage = 1; requestNotifications(); } }); mSwipeLayout.setColorScheme(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); mSwipeLayout.setProgressViewOffset(false, 0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics())); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (!mIsLogin) { mSwipeLayout.setVisibility(View.GONE); mRecyclerView.setVisibility(View.GONE); mEmptyText.setVisibility(View.VISIBLE); } else { mEmptyText.setVisibility(View.GONE); mSwipeLayout.setVisibility(View.VISIBLE); mRecyclerView.setVisibility(View.VISIBLE); mSwipeLayout.setRefreshing(true); requestNotifications(); } } @Override public void onLogin(ProfileModel profile) { super.onLogin(profile); //登录,刷新信息 mEmptyText.setVisibility(View.GONE); mSwipeLayout.setVisibility(View.VISIBLE); mRecyclerView.setVisibility(View.VISIBLE); mSwipeLayout.setRefreshing(true); requestNotifications(); } @Override public void onSuccess(ArrayList<NotificationModel> data) { } @Override public void onSuccess(ArrayList<NotificationModel> data, int totalPages, int currentPage) { mSwipeLayout.setRefreshing(false); mIsLoading = false; if (data.size() == 0) { MessageUtils.showToast(getActivity(), getString(R.string.notification_message)); return; } if(currentPage == 1) { mLoginProfile.notifications = 0; AccountUtils.writeLoginMember(getActivity(), mLoginProfile, false); } mAdapter.update(data, currentPage != 1); mPage = currentPage; mNoMore = currentPage == totalPages; if (mNoMore) { mFootUpdate.dismiss(); } else { mFootUpdate.showLoading(); } } @Override public void onFailure(String error) { mSwipeLayout.setRefreshing(false); mIsLoading = false; MessageUtils.showErrorMessage(getActivity(), error); if (mAdapter.getItemCount() > 0) { mFootUpdate.showFail(); } else { mFootUpdate.dismiss(); } } @Override public void onLoadMore() { if (!mNoMore) requestMoreNotifications(); } private void requestNotifications() { if (mIsLoading) return; mIsLoading = true; V2EXManager.getNotifications(getActivity(), 1, this); } private void requestMoreNotifications() { mIsLoading = true; V2EXManager.getNotifications(getActivity(), mPage + 1, this); } }