package org.aisen.android.ui.fragment; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.AdapterView; import org.aisen.android.R; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.ui.fragment.adapter.BasicRecycleViewAdapter; import org.aisen.android.ui.fragment.adapter.IPagingAdapter; import org.aisen.android.ui.fragment.itemview.AFooterItemView; import org.aisen.android.ui.fragment.itemview.AHeaderItemViewCreator; import java.io.Serializable; import java.util.ArrayList; /** * 维护RecycleView * * Created by wangdan on 16/1/4. */ public abstract class ARecycleViewFragment<T extends Serializable, Ts extends Serializable, Header extends Serializable> extends APagingFragment<T, Ts, Header, RecyclerView> implements AdapterView.OnItemClickListener { @ViewInject(idStr = "recycleview") RecyclerView mRecycleView; @Override public int inflateContentView() { return R.layout.comm_ui_recycleview; } @Override public RecyclerView getRefreshView() { return mRecycleView; } @Override protected void setupRefreshConfig(RefreshConfig config) { super.setupRefreshConfig(config); getRefreshView().addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); ARecycleViewFragment.this.onScrollStateChanged(newState); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } }); getRefreshView().setLayoutManager(configLayoutManager()); } @Override protected IPagingAdapter<T> newAdapter(ArrayList<T> datas) { return new BasicRecycleViewAdapter<>(getActivity(), this, configItemViewCreator(), datas); } /** * 默认是LinearLayoutManager * * @return */ protected RecyclerView.LayoutManager configLayoutManager() { return new LinearLayoutManager(getActivity()); } @Override protected void bindAdapter(IPagingAdapter adapter) { if (getRefreshView().getAdapter() == null) { getRefreshView().setAdapter((BasicRecycleViewAdapter) adapter); } if (((BasicRecycleViewAdapter) getAdapter()).getOnItemClickListener() != this) { ((BasicRecycleViewAdapter) getAdapter()).setOnItemClickListener(this); } } @Override protected void addFooterViewToRefreshView(AFooterItemView<?> footerItemView) { ((BasicRecycleViewAdapter) getAdapter()).addFooterView(footerItemView); } @Override protected void addHeaderViewToRefreshView(AHeaderItemViewCreator<?> headerItemViewCreator) { ((BasicRecycleViewAdapter) getAdapter()).setHeaderItemViewCreator(headerItemViewCreator); } @Override protected void setupRefreshView(Bundle savedInstanceSate) { super.setupRefreshView(savedInstanceSate); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } @Override protected void toLastReadPosition() { super.toLastReadPosition(); if (getRefreshView() == null || TextUtils.isEmpty(refreshConfig.positionKey) || getLastReadPosition() < 0) return; if (getRefreshView().getLayoutManager() instanceof LinearLayoutManager) { final LinearLayoutManager manager = (LinearLayoutManager) getRefreshView().getLayoutManager(); if (getAdapterItems().size() > getLastReadPosition()) { manager.scrollToPositionWithOffset(getLastReadPosition(), getLastReadTop() + getRefreshView().getPaddingTop()); } } } @Override protected int getFirstVisiblePosition() { if (getRefreshView().getLayoutManager() instanceof LinearLayoutManager) { final LinearLayoutManager manager = (LinearLayoutManager) getRefreshView().getLayoutManager(); return manager.findFirstVisibleItemPosition(); } return 0; } }