强大的RecyclerView实现复杂布局

本文探讨了ListView在Android UI中的局限性,如性能问题和扩展性不佳,并介绍了RecyclerView如何作为更强大且灵活的替代方案。通过RecyclerView,可以轻松实现横向和纵向滚动,以及复杂的布局设计。内容包括创建子布局、定义目标对象、适配器实现、主布局修改和Java主程序的设置。同时提到了RecyclerView的LayoutManager,它可以设置为线性、网格或瀑布流布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当然我们提提他的兄弟ListView,这位大哥在android中UI的地位也是举足轻重,几乎存在于你的任何APP上,新闻,淘宝,。。。。。等等,但是ListView也存在大量的不足,性能差,扩展性不好,如果想要实现横向滚动,我也不知道能不能实现,反正没看过别人实现过,以前横向滚动有个Gallery去实现,不过在今天这种已经不需要了,我们可以通过RecyclerView实现横向滚动以及竖向滚动,当然我们还可以实现更加复杂的布局,不哔哔了,直接开始吧
先写子布局,新建sub.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

2.新建目标对象

package com.example.fang.myapplication;

/**
 * Created by fang on 2017/11/12.
 */

public class LayoutList {
    int Image;
    String text;

    public LayoutList(int image, String text) {
        Image = image;
        this.text = text;
    }


    public int getImage() {
        return Image;
    }

    public void setImage(int image) {
        Image = image;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

实现适配器

package com.example.fang.myapplication;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by fang on 2017/11/11.
 */

public class MyViewAdapter extends RecyclerView.Adapter {

    List list;

    public MyViewAdapter(List list) {
        this.list = list;
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
     ImageView imageView;
        TextView textView;

        public MyViewHolder(View itemView) {
            super(itemView);
            imageView= (ImageView) itemView.findViewById(R.id.imageView);
            textView= (TextView) itemView.findViewById(R.id.textView);
        }
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //这里我们发现需要绑定一个RecyclerView.ViewHolder,那么我们只能实现它
          View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.sub_layout,parent,false);
        MyViewHolder myViewHolder=new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  //在这里我们进行数据的绑定工作
            LayoutList layoutList= (LayoutList) list.get(position);
        ((MyViewHolder)holder).textView.setText(layoutList.getText());
        ((MyViewHolder)holder).imageView.setImageResource(layoutList.getImage());
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
}

修改主布局

<?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"
    tools:context="com.example.fang.myapplication.MainActivity">

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

</LinearLayout>

,最后一步,java主程序

package com.example.fang.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
  List list;
    RecyclerView recyclerView;
    MyViewAdapter myViewAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       initinal();
        recyclerView= (RecyclerView) findViewById(R.id.RecyclerView);
        LinearLayoutManager linear=new LinearLayoutManager(this);
        //在这里我们实现的是布局的管理
        recyclerView.setLayoutManager(linear);
        recyclerView.setAdapter(myViewAdapter);
    }

    private void initinal() {
        list=new ArrayList();
        list.add(new LayoutList(R.drawable.one,"暂停"));
        list.add(new LayoutList(R.drawable.two,"添加"));
        list.add(new LayoutList(R.drawable.three,"上一步"));
        list.add(new LayoutList(R.drawable.four,"停止"));
        list.add(new LayoutList(R.drawable.five,"播放"));
        myViewAdapter=new MyViewAdapter(list);
    }
}

欧了,在这里我们顺便说一下,LayoutManager用于指定RecyclerView的布局方式,上面我们用的是线性布局。当然RecyclerView也为我们提供了GridLayoutManager和staggeredGridLayoutManager这两种内置的布局排列方式,前者实现的是网格布局,后者实现的是瀑布流,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值