package ren.solid.materialdesigndemo.fragment;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import com.google.gson.reflect.TypeToken;
import com.jcodecraeer.xrecyclerview.ProgressStyle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import ren.solid.library.fragment.base.BaseFragment;
import ren.solid.library.http.HttpClientManager;
import ren.solid.library.http.callback.adapter.JsonHttpCallBack;
import ren.solid.library.utils.ToastUtils;
import ren.solid.materialdesigndemo.R;
import ren.solid.materialdesigndemo.adapter.BookAdapter;
import ren.solid.materialdesigndemo.bean.BookBean;
import ren.solid.materialdesigndemo.constants.Apis;
/**
* Created by _SOLID
* Date:2016/3/30
* Time:11:54
*/
public class BookFragment extends BaseFragment implements View.OnClickListener {
private static final String TAG = "BookFragmentTAG";
private static final int ACTION_REFRESH = 1;
private static final int ACTION_LOAD_MORE = 2;
private XRecyclerView mRecyclerView;
private BookAdapter mBookAdapter;
private FloatingActionButton mFABSearch;
private EditText mETInput;
private AlertDialog mInputDialog;
private int mCurrentAction = ACTION_REFRESH;
private String mCurrentKeyWord;
private int mPageSize = 20;
private int mCurrentPageIndex = 1;
@Override
protected int setLayoutResourceID() {
return R.layout.fragment_book;
}
@Override
protected void setUpView() {
mFABSearch = $(R.id.fab_search);
LinearLayoutManager LayoutManager = new LinearLayoutManager(getContext());
mRecyclerView = $(R.id.recyclerview);
mBookAdapter = new BookAdapter(getMContext(), new ArrayList<BookBean>());
mRecyclerView.setAdapter(mBookAdapter);
mRecyclerView.setLayoutManager(LayoutManager);
mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
switchAction(ACTION_REFRESH);
}
@Override
public void onLoadMore() {
switchAction(ACTION_LOAD_MORE);
}
});
mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallClipRotatePulse);
mRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.SquareSpin);
mFABSearch.setOnClickListener(this);
initInputDialog();
dynamicAddSkinView(mFABSearch, "backgroundTint", R.color.colorAccent);
}
@Override
protected void setUpData() {
String[] keyWords = {"Android", "文艺青年", "科技", ".NET", "创业之路"};
Random random = new Random();
int n = random.nextInt(keyWords.length);
mCurrentKeyWord = keyWords[n];
//switchAction(ACTION_REFRESH);
mRecyclerView.setRefreshing(true);
}
private void getData() {
String reqUrl = Apis.SearchBookApi + "?q=" + mCurrentKeyWord + "&start=" + (mCurrentPageIndex - 1) * mPageSize +
"&count=" + mPageSize;
HttpClientManager.getData(reqUrl, new JsonHttpCallBack<List<BookBean>>() {
@Override
public Type getType() {
return new TypeToken<List<BookBean>>() {
}.getType();
}
@Override
public String getDataName() {
return "books";
}
@Override
public void onSuccess(List<BookBean> result) {
mBookAdapter.addAll(result);
loadComplete();
}
@Override
public void onError(Exception e) {
Log.e(TAG, "onError:" + e);
ToastUtils.getInstance().showToast(e.getMessage());
loadComplete();
}
});
}
private void loadComplete() {
if (mCurrentAction == ACTION_REFRESH)
mRecyclerView.refreshComplete();
if (mCurrentAction == ACTION_LOAD_MORE)
mRecyclerView.loadMoreComplete();
}
private void switchAction(int action) {
mCurrentAction = action;
switch (mCurrentAction) {
case ACTION_REFRESH:
mBookAdapter.clear();
mCurrentPageIndex = 1;
break;
case ACTION_LOAD_MORE:
mCurrentPageIndex++;
break;
}
getData();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fab_search:
mInputDialog.show();
break;
default:
break;
}
}
/***
* 初始化输入对框框
*/
private void initInputDialog() {
mETInput = new EditText(getMContext());
mETInput.setTextColor(Color.parseColor("#292929"));
AlertDialog.Builder builder = new AlertDialog.Builder(getMContext());
builder.setTitle("请输入关键字");
builder.setView(mETInput);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mCurrentKeyWord = mETInput.getText().toString();
if ("".equals(mCurrentKeyWord)) {//如果用户输入的关键字为空,我们就按照最开始的数据加载方式加载
setUpData();
} else {
switchAction(ACTION_REFRESH);
}
mETInput.setText("");
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mETInput.setText("");
}
});
mInputDialog = builder.create();
}
}