package com.lh.fly.ui.activity; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.Handler; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.AdapterView; import android.widget.Toast; import com.lh.fly.App; import com.lh.fly.R; import com.lh.fly.api.AccessTokenKeeper; import com.lh.fly.common.assist.Toastor; import com.lh.fly.common.log.Log; import com.lh.fly.data.statuses.AccessStatusesService; import com.lh.fly.model.HomeTimeLine; import com.lh.fly.ui.adapter.HomeStatusesAdapter; import com.lh.fly.ui.adapter.SimpleDividerItemDecoration; import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.accountswitcher.AccountHeader; import com.mikepenz.materialdrawer.model.DividerDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem; import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IProfile; import com.sina.weibo.sdk.openapi.models.Status; import java.util.ArrayList; import java.util.List; import butterknife.InjectView; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class HomeActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener { private static final int DEFAULT_LOAD_COUNT = 20; @InjectView(R.id.swipe_refresh) SwipeRefreshLayout swipeRefresh; @InjectView(R.id.rv_home_statuses) RecyclerView rcHomeStatuses; private HomeStatusesAdapter mHomeStatusesAdapter; private LinearLayoutManager mllManager; /** Drawer */ private AccountHeader.Result mHeaderResult = null; private Drawer.Result mDrawerResult = null; private int previousTotal = 0; // The total number of items in the dataset after the last load private boolean loading = false; // True if we are still waiting for the last set of data to load. private int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more. int firstVisibleItem, visibleItemCount, totalItemCount; private long sinceId = 0; private IProfile profile = new ProfileDrawerItem().withName("我这个疯子啊").withEmail("464538715@qq.com").withIcon("https://avatars3.githubusercontent.com/u/1476232?v=3&s=460"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); init(); } @Override protected void init() { super.init(); // init view mToolbar.setTitle(getResources().getString(R.string.app_name)); // 设置刷新颜色 swipeRefresh.setColorSchemeColors(getResources().getIntArray(R.array.color_scheme_colors)); swipeRefresh.setOnRefreshListener(this); // 设置divider rcHomeStatuses.addItemDecoration( new SimpleDividerItemDecoration(getResources().getDrawable(R.drawable.rv_divider))); // setLayoutManager mllManager = new LinearLayoutManager(getApplicationContext()); rcHomeStatuses.setLayoutManager(mllManager); mHomeStatusesAdapter = new HomeStatusesAdapter(this); rcHomeStatuses.setAdapter(mHomeStatusesAdapter); rcHomeStatuses.setHasFixedSize(true); rcHomeStatuses.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int end = recyclerView.getChildCount() + mllManager.findFirstVisibleItemPosition(); int totalItemCount = mllManager.getItemCount(); // 到达底部进行加载更多 if (end == totalItemCount && !loading) { // 只调用一次 onLoadMore(); } // visibleItemCount = recyclerView.getChildCount(); // totalItemCount = mllManager.getItemCount(); // firstVisibleItem = mllManager.findFirstVisibleItemPosition(); // // if (loading) { // if (totalItemCount > previousTotal) { // loading = false; // previousTotal = totalItemCount; // } // } // if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { // onLoadMore(); // loading = true; // } } }); // Create the AccountHeader mHeaderResult = new AccountHeader() .withActivity(this) .withHeaderBackground(new ColorDrawable(Color.DKGRAY)) .addProfiles( profile, //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account) new ProfileSettingDrawerItem().withName("添加账户").withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_add).actionBarSize().paddingDp(5).colorRes(R.color.material_drawer_primary_text)).withIdentifier(1), new ProfileSettingDrawerItem().withName("管理账户").withIcon(GoogleMaterial.Icon.gmd_settings) ).build(); mDrawerResult = new Drawer() .withActivity(this) .withToolbar(mToolbar) .withAccountHeader(mHeaderResult) .addDrawerItems( new DividerDrawerItem(), new SecondaryDrawerItem().withName("设置") ) .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id, IDrawerItem drawerItem) { // do something with the clicked item :D } }) .build(); new Handler().postDelayed(new Runnable() { @Override public void run() { swipeRefresh.setRefreshing(true); loadData(); } }, 100); } /** * 监听刷新 加载数据 */ @Override public void onRefresh() { sinceId = 0; loadData(); } private void onLoadMore() { new Handler().postDelayed(new Runnable() { @Override public void run() { loading = true; loadData(); } }, 2000); } private void loadData() { AccessStatusesService accessStatusesService = App.getService(AccessStatusesService.class); accessStatusesService.getDefaultHomeTimeLine( AccessTokenKeeper.readAccessToken(getApplicationContext()).getToken(), sinceId, DEFAULT_LOAD_COUNT, new Callback<HomeTimeLine>() { @Override public void success(HomeTimeLine homeTimeLine, Response response) { Toast.makeText(getApplicationContext(), "成 功", Toast.LENGTH_SHORT).show(); loading = false; mHomeStatusesAdapter.update(homeTimeLine.statuses); sinceId = homeTimeLine.since_id; closeRefresh(); } @Override public void failure(RetrofitError error) { Toast.makeText(getApplicationContext(), "失 败", Toast.LENGTH_SHORT).show(); closeRefresh(); } }); } private void closeRefresh() { if (null != swipeRefresh && swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); } } }