package com.lzx.demo.fragment;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.github.jdsjlzx.recyclerview.LRecyclerViewAdapter;
import com.lzx.demo.ItemDecoration.StickyHeaderDecoration;
import com.lzx.demo.R;
import com.lzx.demo.adapter.StickyTestAdapter;
public class StickyHeaderFragment extends BaseDecorationFragment implements RecyclerView.OnItemTouchListener{
private StickyHeaderDecoration decor;
@Override
protected void setAdapterAndDecor(RecyclerView list) {
final StickyTestAdapter adapter = new StickyTestAdapter(this.getActivity());
decor = new StickyHeaderDecoration(adapter);
setHasOptionsMenu(true);
mLRecyclerViewAdapter = new LRecyclerViewAdapter(adapter);
list.setAdapter(mLRecyclerViewAdapter);
list.addItemDecoration(decor, 1);
list.addOnItemTouchListener(this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_clear_cache) {
decor.clearHeaderCache();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
// really bad click detection just for demonstration purposes
// it will not allow the list to scroll if the swipe motion starts
// on top of a header
View v = rv.findChildViewUnder(e.getX(), e.getY());
return v == null;
// return rv.findChildViewUnder(e.getX(), e.getY()) != null;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
// only use the "UP" motion event, discard all others
if (e.getAction() != MotionEvent.ACTION_UP) {
return;
}
// find the header that was clicked
View view = decor.findHeaderViewUnder(e.getX(), e.getY());
if (view instanceof TextView) {
Toast.makeText(this.getActivity(), ((TextView) view).getText() + " clicked", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
// do nothing
}
}