安卓学习笔记_Day_06
RecyclerView的使用:
主活动的界面:
<?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=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
列表子项目的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_root"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/header"
android:paddingLeft="10dp"
android:layout_width="80dp"
android:layout_height="80dp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:paddingLeft="10dp"
android:textSize="20dp"
android:textColor="#2D72EB"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/desc"
android:textSize="12dp"
android:textColor="#DDBC58"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
为列表子项目创建的属性类:
public class Person {
public String name;
public String decs;
public int id;
Person(String name,String decs,int id){
this.decs = decs;
this.id = id;
this.name = name;
}
}
主活动:
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<Person> personList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler);
//设置RecyclerView保持固定大小,这样可以优化RecyclerView的性能
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//设置RecyclerView的滚动方向
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//为RecyclerView设置布局管理器
recyclerView.setLayoutManager(linearLayoutManager);
initData();
RecyclerView.Adapter adapter = new RecyclerView.Adapter<PersonViewHolder>() {
@NonNull
//创建列表项组件的方法,使用该方法所创建的组件会被自动保存
@Override
public PersonViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item1,null);
return new PersonViewHolder(view,this);
}
//为列表项组件绑定数据的方法,每次组件重新显示出来时都会重新执行该方法
@Override
public void onBindViewHolder(@NonNull PersonViewHolder viewHolder, int i) {
viewHolder.nameTv.setText(personList.get(i).name);
viewHolder.descTv.setText(personList.get(i).decs);
viewHolder.headerTv.setImageResource(personList.get(i).id);
}
@Override
public int getItemCount() {
return personList.size();
}
};
recyclerView.setAdapter(adapter);
}
private void initData(){
String[] names = new String[]{
"爬升 " ,"速度" ,"将我推向" ,"椅背","模糊的城市" ,"慢慢地" ,"飞出" ,"我的视线"};
String[] decs = new String[]{
"远离地面" ,"快接近三万英尺的距离" ,"思念像黏着身体的引力"
,"还拉着泪不停地往下滴","逃开了你" ,"我躲在三万英尺的云底","每一次穿过乱流的突袭" , "紧紧地靠在椅背上的我"
};
int [] imagesIds = new int[]{
R.drawable.w1,R.drawable.w2,R.drawable.w3,R.drawable.w4,
R.drawable.w5,R.drawable.w6,R.drawable.w7,R.drawable.w8};
for (int j = 0;j<names.length;j++){
for (int i = 0;i<names.length;i++){
this.personList.add(new Person(names[i],decs[i],imagesIds[i]));
}
}
}
class PersonViewHolder extends RecyclerView.ViewHolder{
View rootView;
TextView nameTv;
TextView descTv;
ImageView headerTv;
private RecyclerView.Adapter adapter;
public PersonViewHolder(@NonNull View itemView, final RecyclerView.Adapter adapter) {
super(itemView);
this.nameTv = itemView.findViewById(R.id.name);
this.descTv = itemView.findViewById(R.id.desc);
this.headerTv = itemView.findViewById(R.id.header);
this.rootView = itemView.findViewById(R.id.item_root);
this.adapter = adapter;
//子项目的点击监听事件
headerTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this," 666", Toast.LENGTH_SHORT).show();
}
});
rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int i = (int) (Math.random() * (personList.size() + 1));
Person person = new Person(personList.get(i).name,personList.get(i).decs,personList.get(i).id);
adapter.notifyItemInserted(2);
personList.add(2,person);
adapter.notifyItemRangeChanged(2,adapter.getItemCount());
}
});
rootView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = getAdapterPosition();
//通知RecyclerView执行动画
adapter.notifyItemRemoved(position);
//删除底层数据模型中的数据
MainActivity.this.personList.remove(position);
//通知RecyclerView执行实际的删除操作
adapter.notifyItemRangeRemoved(position,adapter.getItemCount());
return false;
}
});
}
}
}
还没有评论,来说两句吧...