这是我参与「第四届青训营」笔记创作活动的第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));
}
}
}