package com.mjj.changetheme.fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.mjj.changetheme.activity.MainActivity;
import com.mjj.changetheme.R;
import com.mjj.changetheme.activity.SecondActivity;
import com.mjj.changetheme.adapter.RecyclerAdapter;
public class MainFragment extends Fragment implements RecyclerAdapter.OnItemClickListener {
private Context mContext;
private RecyclerView mRecyclerView;
private LinearLayoutManager mLinearLayoutManager;
private boolean move = false;
private OnRecyclerViewCreated mOnRecyclerViewCreated;
//记录顶部显示的项
private int position = 0;
//记录顶部项的偏移
private int scroll = 0;
@Override
public void onAttach(Context context) {
mContext = context;
mOnRecyclerViewCreated = (OnRecyclerViewCreated) context;
super.onAttach(context);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frament_main_content, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
setActionBar(toolbar);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycleview);
setAdapter();
return view;
}
private void setActionBar(Toolbar toolbar) {
((MainActivity)mContext).setSupportActionBar(toolbar);
}
private void setAdapter(){
mLinearLayoutManager = new LinearLayoutManager(mContext);
mRecyclerView.setLayoutManager(mLinearLayoutManager);
RecyclerAdapter adapter = new RecyclerAdapter();
mRecyclerView.setAdapter(adapter);
adapter.addOnItemClickListener(this);
mRecyclerView.addOnScrollListener(new RecyclerViewListener());
position = getArguments().getInt("position");
scroll = getArguments().getInt("scroll");
move();
}
private void move(){
if (position<0 || position>=mRecyclerView.getAdapter().getItemCount() ) {
return;
}
int firstItem = mLinearLayoutManager.findFirstVisibleItemPosition();
int lastItem = mLinearLayoutManager.findLastVisibleItemPosition();
if (position <= firstItem ){
mRecyclerView.scrollToPosition(position);
move = true;
}else if ( position <= lastItem ){
int top = mRecyclerView.getChildAt(position - firstItem).getTop() - scroll;
mRecyclerView.scrollBy(0, top);
mOnRecyclerViewCreated.recyclerViewCreated();
}else{
mRecyclerView.scrollToPosition(position);
move = true;
}
}
@Override
public void onItemClick(View view) {
Intent intent = new Intent(mContext, SecondActivity.class);
startActivity(intent);
}
class RecyclerViewListener extends RecyclerView.OnScrollListener{
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (move){
move = false;
int n = position - mLinearLayoutManager.findFirstVisibleItemPosition();
if ( 0 <= n && n < mRecyclerView.getChildCount()){
int top = mRecyclerView.getChildAt(n).getTop() - scroll;
mRecyclerView.smoothScrollBy(0, top);
}
mOnRecyclerViewCreated.recyclerViewCreated();
}
}
}
public RecyclerView getRecyclerView(){
return mRecyclerView;
}
public interface OnRecyclerViewCreated{
void recyclerViewCreated();
}
}