首页 > 系统 > Android > 正文

Android嵌套RecyclerView左右滑动替代自定义view

2019-12-12 02:37:09
字体:
来源:转载
供稿:网友

以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求就是要么一个独立的左右滑动效果,要么在一个列表里的中间部分一个左右滑动效果

而列表里面也容易,只是需要解决一点小问题,个人认为值得一提的就是高度问题,一般的人采用固定死的高度,可是在列表里面展示和机型的不同,固定死的话很难保证美观,动态的高度才能解决问题的所在

首先在一个列表控件布局上添加一个recyclerview控件

<android.support.v7.widget.RecyclerView  android:id="@+id/plan_recycler"  android:layout_width="match_parent"  android:layout_height="wrap_content"/>

然后是adapter适配器布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="match_parent" android:padding="@dimen/dimen_20dp"> <ImageView android:id="@+id/img_icon"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center_horizontal"  android:src="@drawable/bbs_plan_mofa"/> <TextView android:id="@+id/tv_content"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center_horizontal"  android:layout_marginTop="@dimen/dimen_8dp"  android:textSize="15sp"  android:textColor="@color/color_323232"/></LinearLayout>

接下来写adapter

import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.xulu.loanmanager.R;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;/** * Created by LiuZhen on 2017/6/22. */public class BBSPlanAdapter extends RecyclerView.Adapter<BBSPlanAdapter.MyViewHolder> { private List<String> list; private LayoutInflater mInflater; private Context context=null; private int height; private boolean isMeasure = false; private CallBack callBack; public BBSPlanAdapter(Context context, List<String> list, CallBack callBack) {  this.context=context;  this.list = list;  mInflater = LayoutInflater.from(context);  this.callBack = callBack; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  View view = mInflater.inflate(R.layout.item_bbsdetail_plan, parent, false);  if (!isMeasure) {   view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);   height = view.getMeasuredHeight();   callBack.getHeight(height);  }  MyViewHolder holder = new MyViewHolder(view);  return holder; } public int getHeight(){  return height; } @Override public void onBindViewHolder(MyViewHolder holder, final int position) {  holder.itemView.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    callBack.ItemClick(position);   }  }); } @Override public int getItemCount() {  return 6; } static class MyViewHolder extends RecyclerView.ViewHolder{  @BindView(R.id.tv_content)  TextView tv_content;  MyViewHolder(View view){   super(view);   ButterKnife.bind(this,view);  } } public interface CallBack{  void getHeight(int height);  void ItemClick(int position); }}

重点是measure方法,得到测量的高度

接下来就可以直接使用了

private void initScrollList(){  final RecyclerView planRecycler = (RecyclerView) headView.findViewById(R.id.plan_recycler);  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(BBSDetailActivity.this);  linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);  planRecycler.setLayoutManager(linearLayoutManager);  List<String> list = new ArrayList<>();  BBSPlanAdapter adapter = new BBSPlanAdapter(BBSDetailActivity.this, list, new BBSPlanAdapter.CallBack() {   @Override   public void getHeight(int height) {    ViewGroup.LayoutParams params = planRecycler.getLayoutParams();    params.height = height;    planRecycler.setLayoutParams(params);   }   @Override   public void ItemClick(int position) {    Toast.makeText(BBSDetailActivity.this,""+position,Toast.LENGTH_SHORT).show();   }  });  planRecycler.setAdapter(adapter); }

很简单,完全替代自定义view,效果如下,如果没有测量这一步可能会出现高度不适合,要么是看不到textview的文字,因为太低了,要么就是太高了,不美观。

以上所述是小编给大家介绍的Android嵌套RecyclerView左右滑动替代自定义view,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表