package ren.solid.ganhuoio.common;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import ren.solid.ganhuoio.GanHuoIOApplication;
import ren.solid.ganhuoio.R;
import ren.solid.ganhuoio.common.event.SortChangeEvent;
import ren.solid.library.fragment.base.BaseFragment;
import ren.solid.library.rx.RxBus;
import ren.solid.library.utils.CommonUtils;
import ren.solid.library.utils.PrefUtils;
import ren.solid.library.utils.SnackBarUtils;
/**
* Created by _SOLID
* Date:2016/5/17
* Time:15:52
*/
public class SortFragment extends BaseFragment {
private RecyclerView mRecyclerView;
private SortAdapter mAdapter;
private List<String> mList;
private ItemTouchHelper mItemTouchHelper;
@Override
protected int setLayoutResourceID() {
return R.layout.fragment_sort;
}
@Override
protected void setUpView() {
mRecyclerView = $(R.id.recyclerview);
// mList = Category.getGanHuoCateGory();
mAdapter = new SortAdapter(getMContext(), mList);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getMContext()));
mRecyclerView.setAdapter(mAdapter);
ItemTouchHelper.Callback callback = new SortCallBack(mAdapter);
mItemTouchHelper = new ItemTouchHelper(callback);
mItemTouchHelper.attachToRecyclerView(mRecyclerView);
}
private void showTips() {
boolean isHaveTips = PrefUtils.getBoolean(GanHuoIOApplication.getInstance(), "isHaveTips", true);
if (isHaveTips) {
SnackBarUtils.makeLong(mRecyclerView, "长按条目进行拖拽排序").info("我知道了", new View.OnClickListener() {
@Override
public void onClick(View v) {
PrefUtils.putBoolean(GanHuoIOApplication.getInstance(), "isHaveTips", false);
}
});
}
}
@Override
protected void setUpData() {
mRecyclerView.postDelayed(new Runnable() {
@Override
public void run() {
showTips();
}
}, 100);
}
public class SortAdapter extends RecyclerView.Adapter<SortAdapter.ViewHolder> implements ItemTouchHelperAdapter {
Context context;
List<String> beans = new ArrayList<>();
SortAdapter(Context context, List<String> beans) {
this.context = context;
this.beans = beans;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.item_sort, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (position != 0) {
holder.iv_icon.setImageResource(R.drawable.icon_sort_item);
} else {
holder.iv_icon.setImageResource(R.drawable.icon_fix);
}
holder.tv_name.setText(beans.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonUtils.vibrate(getMContext(), 100);
}
});
}
@Override
public int getItemCount() {
return beans.size();
}
@Override
public void onItemMove(int fromPosition, int toPosition) {
if (fromPosition != 0 && toPosition != 0) {
Collections.swap(beans, fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
saveCategoryString();
RxBus.getInstance().send(new SortChangeEvent());
} else {
SnackBarUtils.makeLong(mRecyclerView, "第一个条目不允许拖动").info();
}
}
@Override
public void onItemDismiss(int position) {
beans.remove(position);
notifyItemRemoved(position);
}
List<String> getDatas() {
return beans;
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView iv_icon;
TextView tv_name;
ViewHolder(View itemView) {
super(itemView);
iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);
tv_name = (TextView) itemView.findViewById(R.id.tv_name);
}
}
}
public String saveCategoryString() {
StringBuilder builder = new StringBuilder();
List<String> list = mAdapter.getDatas();
for (int i = 0; i < list.size(); i++) {
if (i != list.size() - 1) {
builder.append(list.get(i));
builder.append("|");
} else {
builder.append(list.get(i));
}
}
String str = builder.toString();
PrefUtils.putString(getMContext(), "HomeCategory", str);
return str;
}
public class SortCallBack extends ItemTouchHelper.Callback {
private ItemTouchHelperAdapter adapter = null;
SortCallBack(ItemTouchHelperAdapter adapter) {
this.adapter = adapter;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
adapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.onItemDismiss(viewHolder.getAdapterPosition());
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
@Override
public boolean isItemViewSwipeEnabled() {
return false;
}
}
public interface ItemTouchHelperAdapter {
void onItemMove(int fromPosition, int toPosition);
void onItemDismiss(int position);
}
}