package com.lin.poweradapter.example.stickyheaders;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.gjiazhe.wavesidebar.WaveSideBar;
import com.google.gson.reflect.TypeToken;
import com.lin.poweradapter.example.R;
import com.lin.poweradapter.example.RecyclerViewActivity;
import com.lin.poweradapter.example.util.JSONUtils;
import com.lin.poweradapter.example.util.Utils;
import com.timehop.stickyheadersrecyclerview.StickyRecyclerHeadersDecoration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import butterknife.BindView;
/**
* Created by lin18 on 2017/4/27.
*/
public class StickyHeadersActivity extends RecyclerViewActivity<City, StickyHeadersAdapter> {
@BindView(R.id.side_bar)
WaveSideBar sideBar;
StickyRecyclerHeadersDecoration headersDecor;
@Override
public int getLayoutResource() {
return R.layout.activity_stickyheaders;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sideBar.setOnSelectIndexItemListener(new WaveSideBar.OnSelectIndexItemListener() {
@Override
public void onSelectIndexItem(String letter) {
int pos = adapter.getLetterPosition(letter);
if (pos != -1) {
recyclerView.scrollToPosition(pos);
LinearLayoutManager mLayoutManager =
(LinearLayoutManager) recyclerView.getLayoutManager();
mLayoutManager.scrollToPositionWithOffset(pos, 0);
}
}
});
configure();
headersDecor = new StickyRecyclerHeadersDecoration(adapter);
recyclerView.addItemDecoration(headersDecor);
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
headersDecor.invalidateHeaders();
}
});
loadData();
}
@NonNull
@Override
protected StickyHeadersAdapter createAdapter() {
return new StickyHeadersAdapter(this);
}
@Override
protected void loadData() {
new AsyncTask<Void, Void, List<City>>() {
@Override
protected List<City> doInBackground(Void... params) {
final List<City> list = JSONUtils.toList(Utils.readFromAssets(StickyHeadersActivity.this, "cities.json"), new TypeToken<ArrayList<City>>() {});
Collections.sort(list, new LetterComparator());
return list;
}
@Override
protected void onPostExecute(List<City> cities) {
super.onPostExecute(cities);
if (isFinishing()) return;
adapter.setItems(cities);
setRefreshing(false);
}
}.execute();
}
@Override
public void onItemClick(View v, int position) {
super.onItemClick(v, position);
showToast("onItemClick : " + adapter.getItem(position).name);
}
@Override
public boolean onItemLongClick(View v, int position) {
showToast("onItemLongClick : " + adapter.getItem(position).name);
return true;
}
}