UI设计探索之recyclerview | 青训营笔记

180 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第1天。

记录一个recyclerview的完整使用过程
比listview更好用的
1、在build.gradle(:app)中加入关于recyclerview的依赖

implementation 'androidx.recyclerview:recyclerview:1.2.1'

注意用androidx,网上有很多老版本的不行
2、在first_layout.xml中加入recyclerview的布局

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycle_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

出现id名字报错的现象、

<!--报错:Cannot resolve symbol '@+id/***'
 解决方法:build clean project
 -->

3、创建一个fruit类

package com.example.activitytest;

import android.text.method.ReplacementTransformationMethod;

public class fruit {
    private String name;
    private  int imageId;
    public fruit(String name,int imageId){
        this.name=name;
        this.imageId=imageId;
    }
    public String getName(){
        return name;
    }
    public  int getImageId(){
        return imageId;
    }

}

4、创建一个fruitAdapter类 RecycleView的适配器,该适配器继承于RecyclerView.Adapter 泛型指定为fruitAdapter.ViewHolder
ViewHolder 为内部类
fruitAdapter 的构造函数 功能:把要展示的数据源传递进来
RecycleView.Adapter 的相关类 必须重写3个方法:
1 onCreateViewHolder 2 onBindViewHolder 3 getItemCount

//1 用来创建ViewHolder实例
package com.example.activitytest;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;


public class fruitAdapter extends RecyclerView.Adapter<fruitAdapter.ViewHolder> {
    private List<fruit> mFruitList;

    static class ViewHolder extends  RecyclerView.ViewHolder{
        ImageView fruitImage;
        TextView fruitName;
        public ViewHolder(View view1){
            super(view1);
            fruitImage=(ImageView) view1.findViewById(R.id.fruit_image);
            fruitName=(TextView) view1.findViewById(R.id.fruit_name);
        }
    }
   
    public fruitAdapter(List<fruit> fruitList){
        mFruitList=fruitList;
    }

   
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext())
                .inflate(R.layout.fruit_item,parent,false);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        fruit fruit1=mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit1.getImageId());
        holder.fruitName.setText(fruit1.getName());
    }

    @Override
    public int getItemCount() {
       // return 0;
        return mFruitList.size();
    }



}

5、在主activity加入
匿名内部类 为按钮注册监听器setOnClickListener(),点击按钮时执行OnClick()方法
Toast:消息提醒方式,一段时间自动消失 用法:静态方法makeText创建Toast对象,调用show显示出来.
makeText()三个参数:1、Context 2、Toast显示的文本 3、Toast的显示时长
Intent是Android程序中各组件进行交互的一种重要方式,用于启用活动、启用服务、发送广播等场景 分为显式Intent和隐式Intent
构造函数: Intent(Context packageContext,Class) 第一个参数Context要求提供启动活动的上下文,第二个指明目标活动 用startActivity(intent)启动目标活动

package com.example.activitytest;

import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ActionMenuView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

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

public class FirstActivity extends AppCompatActivity {
    private List<fruit> fruitList=new ArrayList<>();
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }
    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"you click add",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this,"you click remove",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        ActionBar actionbar=getSupportActionBar();
        if(actionbar !=null){
            actionbar.hide();
        }
      
        Button button1=(Button)findViewById(R.id.button_1);
        Button button2=(Button)findViewById(R.id.button_2);
      
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Toast.makeText(FirstActivity.this, "you clicked Button1", Toast.LENGTH_SHORT).show();
                //Intent intent2=new Intent("com.example.activitytest.ACTION_START");
               //intent2.addCategory("com.example.activitytest.MY_CATEGORY");
                //startActivity(intent2);
              //  Intent intent4=new Intent(Intent.ACTION_VIEW);
               // intent4.setData(Uri.parse("http://www.baidu.com"));
                //startActivity(intent4);
                Intent intent5=new Intent(Intent.ACTION_DIAL);
                intent5.setData(Uri.parse("tel:18669688017"));
                startActivity(intent5);
                //隐式intent,给出更抽象的action和category信息,交由系统分析这个intent
                //<activity>标签下配置<intent-filter>的内容
            }
        });
       
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(FirstActivity.this, "you clicked Button2", Toast.LENGTH_SHORT).show();
                String data="~~~~~~~hello wuluketao!!!!!!!!!!!~~~~~~";
                Intent intent1 =new Intent(FirstActivity.this,SecondActivity.class);
                intent1.putExtra("extra_data",data);
                startActivity(intent1);
                //finish();
                //显式intent启动活动时传递数据,通过putExtra()方法传递参数
            }
        });

        initFruits();
        RecyclerView recyclerView=(RecyclerView) findViewById(R.id.recycle_view);
        LinearLayoutManager layoutManager =new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        fruitAdapter adapter =new fruitAdapter(fruitList);
        recyclerView.setAdapter(adapter);

    }

    private void initFruits(){
        for(int i=0;i<2;i++){
            fruitList.add(new fruit("apple",R.drawable.title_bg));
            fruitList.add(new fruit("pear",R.drawable.title_bg));
            fruitList.add(new fruit("banana",R.drawable.title_bg));
            fruitList.add(new fruit("orange",R.drawable.title_bg));
            fruitList.add(new fruit("pineapple",R.drawable.title_bg));
            fruitList.add(new fruit("cherry",R.drawable.title_bg));
        }
    }
}