测试两个RecyclerView联动效果,仅做Demo测试用
纯粹给自己留个记录,日后开发到类似功能可以有些想法。
MainActivity.java
package com.example.qxb_810.recyclervieweditdemo;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PagerSnapHelper;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* 此Demo用于测试两个RecyclerView联动效果
*/
public class MainActivity extends AppCompatActivity {
@BindView(R.id.rv_left)
RecyclerView rvLeft;
@BindView(R.id.ll_left)
LinearLayout llLeft;
@BindView(R.id.rv_right)
RecyclerView rvRight;
@BindView(R.id.ll_right)
LinearLayout llRight;
private MyAdapter mLeftAdapter;
private MyAdapter mRightAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
list.add("11");
list.add("12");
list.add("13");
list.add("14");
list.addAll(list);
// 左边
mLeftAdapter = new MyAdapter(list, this, 1);
rvLeft.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
rvLeft.setAdapter(mLeftAdapter);
// 右边
mRightAdapter = new MyAdapter(list, this, 2);
// 限制其滑动只能一次一个item
PagerSnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(rvRight);
rvRight.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
rvRight.setAdapter(mRightAdapter);
rvRight.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager rvRightLayoutManager = (LinearLayoutManager) rvRight.getLayoutManager();
LinearLayoutManager rvLeftLayoutManager = (LinearLayoutManager) rvLeft.getLayoutManager();
int position = rvRightLayoutManager.findFirstVisibleItemPosition();// 找到第一个可见的item, 获取其position
rvLeftLayoutManager.scrollToPosition(position);
mLeftAdapter.setCurrPostion(position);
mLeftAdapter.notifyDataSetChanged();
}
});
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<String> list;
private Context context;
private int type = -1;
private int currPosition = -1;
public MyAdapter(List<String> list, Context context, int type) {
this.list = list;
this.context = context;
this.type = type;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(type == 1 ? R.layout.rv_left_item : R.layout.rv_right_item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tvText.setText(list.get(position));
if (currPosition >= 0 && currPosition < list.size() && currPosition == position) {
holder.tvText.setTextColor(Color.BLUE);
} else {
holder.tvText.setTextColor(Color.BLACK);
}
}
/**
* 设置当前显示position
* @param position
*/
public void setCurrPostion(int position) {
currPosition = position;
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvText;
public MyViewHolder(View itemView) {
super(itemView);
tvText = itemView.findViewById(R.id.tv_text);
if (type == 1) {
setEvent();
}
}
private void setEvent() {
tvText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setCurrPostion(getPosition());
rvRight.scrollToPosition(getPosition());
notifyDataSetChanged();
}
});
}
}
}
}
MainActivity布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_left"
android:layout_width="200dp"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_left"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_right"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_right"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
</LinearLayout>