【Android笔记】 RecyclerView

2021-12-17 14:32:20 浏览数 (2)

布局

代码语言:txt复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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=".BarJudgeActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@ id/textView1"
        android:text="textView1"
        />
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@ id/recyclerView">

    </android.support.v7.widget.RecyclerView>
</LinearLayout>
</android.support.constraint.ConstraintLayout>

子布局

bar_bundle_item.xml

代码语言:txt复制
<?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="vertical">
    <!--包装记录ID-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@ id/perfPackId1"
            android:layout_width="wrap_content"
            android:layout_height="50dp" />
        <TextView
            android:id="@ id/perfPackId2"
            android:layout_width="wrap_content"
            android:layout_height="50dp" />
    </LinearLayout>
    <!--钢种-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@ id/steelGrade1"
            android:layout_width="wrap_content"
            android:layout_height="50dp" />
        <TextView
            android:id="@ id/steelGrade2"
            android:layout_width="wrap_content"
            android:layout_height="50dp" />
    </LinearLayout>
    <!--包装根数-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@ id/packRootCount1"
            android:layout_width="wrap_content"
            android:layout_height="50dp" />
        <TextView
            android:id="@ id/packRootCount2"
            android:layout_width="wrap_content"
            android:layout_height="50dp" />
    </LinearLayout>

</LinearLayout>
代码语言:txt复制
package com.example.meng.mes;


public class BarJudgeActivity extends AppCompatActivity {


    //捆号信息list
    private List<BundleCodeInfoModel> bundleCodeInfoModelList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bar_judge);

        //初始化数据
        initBundleCodeInfo();
        //通过findViewById拿到RecyclerView实例
        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        //设置RecyclerView管理器
        LinearLayoutManager layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        //初始化适配器
        MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter(bundleCodeInfoModelList);
        //设置适配器
        recyclerView.setAdapter(adapter);

    }
    
    private void initBundleCodeInfo()
    {
        BundleCodeInfoModel a1=new BundleCodeInfoModel(1,"50#",15);
        BundleCodeInfoModel a2=new BundleCodeInfoModel(1,"50#",15);
        BundleCodeInfoModel a3=new BundleCodeInfoModel(1,"50#",15);
        bundleCodeInfoModelList.add(a1);
        bundleCodeInfoModelList.add(a2);
        bundleCodeInfoModelList.add(a3);
    }
}

MyRecyclerViewAdapter.cs

代码语言:txt复制
package com.example.meng.mes;

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

import java.util.List;

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder>  {

    private List<BundleCodeInfoModel> mBundleCodeInfoModel;

    static class ViewHolder extends RecyclerView.ViewHolder{
        TextView perfPackId1;
        TextView perfPackId2;
        TextView steelGrade1;
        TextView steelGrade2;
        TextView packRootCount1;
        TextView packRootCount2;
        public ViewHolder(View view){
            super(view);
            perfPackId1 =view.findViewById(R.id.perfPackId1);
            perfPackId2 =view.findViewById(R.id.perfPackId2);
            steelGrade1 =view.findViewById(R.id.steelGrade1);
            steelGrade2 =view.findViewById(R.id.steelGrade2);
            packRootCount1 =view.findViewById(R.id.packRootCount1);
            packRootCount2 =view.findViewById(R.id.packRootCount2);
        }
    }
    public MyRecyclerViewAdapter (List<BundleCodeInfoModel> BundleCodeInfoModel) {
        mBundleCodeInfoModel = BundleCodeInfoModel;
    }

    //创建view
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.bar_bundle_item, viewGroup, false);
        ViewHolder holder = new  ViewHolder(view);
        return holder;
    }
     //绑定数据
    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        BundleCodeInfoModel bundleCodeInfoModel = mBundleCodeInfoModel.get(i);
        viewHolder.perfPackId1.setText("包装记录id:");
        viewHolder.perfPackId2.setText(String.valueOf(bundleCodeInfoModel.getPerfPackId()));
        viewHolder.steelGrade1.setText("钢种:");
        viewHolder.steelGrade2.setText(String.valueOf(bundleCodeInfoModel.getSteelGrade()));
        viewHolder.packRootCount1.setText("包装根数:");
        viewHolder.packRootCount2.setText(String.valueOf(bundleCodeInfoModel.getPackRootCount()));
    }

    //获得总条数
    @Override
    public int getItemCount() {
        return mBundleCodeInfoModel.size();
    }
}
代码语言:txt复制
layoutManager.setStackFromEnd(true);//列表再底部开始展示,反转后由上面开始展示
layoutManager.setReverseLayout(true);//列表翻转

实现Item添加和删除

颜色不准

使用onBindViewHolder方法根据每个model的信息显示不同的背景色,发现背景色乱添加,并不是自己想要的

代码语言:txt复制
    public void onBindViewHolder(@NonNull BundlePhysicalRecAdapter.ViewHolder viewHolder, int i) {
        BundlePhysicalInfoModel model = mBundlePhysicalInfoModelList.get(i);
        viewHolder.INSP_VALUE_NAME.setText(model.INSP_VALUE_NAME);
        xxx
        viewHolder.JUDGE_RESULT.setText(model.JUDGE_RESULT);
        if ("不合格".equals(model.JUDGE_RESULT)) {
               viewHolder.PhysicalItemLayout.setBackgroundColor(Color.RED);
        }
    }        

只有第一个model没问题,之后就乱了

正确的做法是重新获取int的位置

代码语言:txt复制
    @Override
    public int getItemViewType(int position) {
        return position;
    }
代码语言:txt复制
BundlePhysicalInfoModel model = mBundlePhysicalInfoModelList.get(getItemViewType(i));

结语:

后续会持续更新哦

相关视频

Android知识理论

0 人点赞