/**
* Copyright 2016 JustWayward Team
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.justwayward.reader.base;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import com.justwayward.reader.R;
import com.justwayward.reader.view.recyclerview.EasyRecyclerView;
import com.justwayward.reader.view.recyclerview.adapter.OnLoadMoreListener;
import com.justwayward.reader.view.recyclerview.adapter.RecyclerArrayAdapter;
import com.justwayward.reader.view.recyclerview.swipe.OnRefreshListener;
import java.lang.reflect.Constructor;
import javax.inject.Inject;
import butterknife.Bind;
/**
* @author lfh.
* @date 16/9/3.
*/
public abstract class BaseRVFragment<T1 extends BaseContract.BasePresenter, T2> extends BaseFragment implements OnLoadMoreListener, OnRefreshListener, RecyclerArrayAdapter.OnItemClickListener {
@Inject
protected T1 mPresenter;
@Bind(R.id.recyclerview)
protected EasyRecyclerView mRecyclerView;
protected RecyclerArrayAdapter<T2> mAdapter;
protected int start = 0;
protected int limit = 20;
/**
* [此方法不可再重写]
*/
@Override
public void attachView() {
if (mPresenter != null)
mPresenter.attachView(this);
}
protected void initAdapter(boolean refreshable, boolean loadmoreable) {
if (mRecyclerView != null) {
mRecyclerView.setLayoutManager(new LinearLayoutManager(getSupportActivity()));
mRecyclerView.setItemDecoration(ContextCompat.getColor(activity, R.color.common_divider_narrow), 1, 0, 0);
mRecyclerView.setAdapterWithProgress(mAdapter);
}
if (mAdapter != null) {
mAdapter.setOnItemClickListener(this);
mAdapter.setError(R.layout.common_error_view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.resumeMore();
}
});
if (loadmoreable) {
mAdapter.setMore(R.layout.common_more_view, this);
mAdapter.setNoMore(R.layout.common_nomore_view);
}
if (refreshable && mRecyclerView != null) {
mRecyclerView.setRefreshListener(this);
}
}
}
protected void initAdapter(Class<? extends RecyclerArrayAdapter<T2>> clazz, boolean refreshable, boolean loadmoreable) {
mAdapter = (RecyclerArrayAdapter<T2>) createInstance(clazz);
initAdapter(refreshable, loadmoreable);
}
public Object createInstance(Class<?> cls) {
Object obj;
try {
Constructor c1 = cls.getDeclaredConstructor(Context.class);
c1.setAccessible(true);
obj = c1.newInstance(mContext);
} catch (Exception e) {
obj = null;
}
return obj;
}
@Override
public void onLoadMore() {
}
@Override
public void onRefresh() {
mRecyclerView.setRefreshing(true);
}
protected void loaddingError() {
if (mAdapter.getCount() < 1) { // 说明缓存也没有加载,那就显示errorview,如果有缓存,即使刷新失败也不显示error
mAdapter.clear();
}
mAdapter.pauseMore();
mRecyclerView.setRefreshing(false);
mRecyclerView.showTipViewAndDelayClose("似乎没有网络哦");
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (mPresenter != null)
mPresenter.detachView();
}
}