1.自定义BaseAdapter适配ListView
1创建布局文件
<?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="match_parent">
<ImageView
android:id="@+id/listImg"
android:src="@drawable/navigate02"
android:layout_width="60dp"
android:layout_height="60dp"/>
<TextView
android:id="@+id/listTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2、创建数据类
创建Person类
public class Person {
private String name;
private int img;
public Person(String name, int img) {
this.name = name;
this.img = img;
}
public Person() {
}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
}
3、创建PersonAdapter类
public class PersonAdapter extends BaseAdapter {
private List<Person> personData=new ArrayList<Person>();
public PersonAdapter(List<Person> personData, Context context) {
this.personData = personData;
this.context = context;
}
private Context context;
@Override
public int getCount() {
return personData.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
//优化ListView
//定义一个ViewHolder静态类
static class ViewHolder{
//定义属性,定义列表项数据
private ImageView myimg;
private TextView myname;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//绑定数据
ViewHolder holder;
//判断convertView是否为空
if (convertView==null){
//新建
holder=new ViewHolder();
convertView= LayoutInflater.from(context).inflate(R.layout.layout_listview,parent,false);
holder.myimg=(ImageView) convertView.findViewById(R.id.listImg);
holder.myname=(TextView)convertView.findViewById(R.id.listTxt);
}else {
holder=(ViewHolder) convertView.getTag();
}
//设定列表项数据
holder.myimg.setImageResource(personData.get(position).getImg());
holder.myname.setText(personData.get(position).getName());
return convertView;
}
}
4、Activity主文件
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener , AbsListView.OnScrollListener {
private ListView listview;
private String[] names=new String[]{"中国慕课大学","华北电力大学","中国人民大学","北京大学","清华大学",
"中央财经大学","中国政法大学","北京理工大学","北京航空航天大学","北京外国语大学","中国传媒大学","中国民族大学",
"中国矿业大学","中国地质大学","中国科技大学"};
private int [] images=new int[]{R.drawable.navigate01,R.drawable.navigate02,R.drawable.navigate03,R.drawable.navigate04, R.drawable.navigate05,R.drawable.navigate06,R.drawable.navigate07,R.drawable.navigate08,R.drawable.navigate09,R.drawable.navigate10,R.drawable.navigate11,R.drawable.navigate12,R.drawable.navigate13,R.drawable.navigate14,R.drawable.navigate15,R.drawable.navigate16,R.drawable.navigate17,R.drawable.navigate18};
private PersonAdapter adapter;
//定义一个列表作为数据源
private List<Person> listData=new ArrayList<Person>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=findViewById(R.id.listview);
//初始化数据
initData();
adapter=new PersonAdapter(listData,MainActivity.this);
//将适配器添加到listView上
listview.setAdapter(adapter);
}
private void initData(){
for (int i=0; i<names.length; i++){
//新建person对象
Person person=new Person(names[i],images[i]);
//将对象加入到list列表中
listData.add(person);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//获取点击的条目的对象
Person person=listData.get(position);
//弹出每个条目的名称
Toast.makeText(MainActivity.this,person.getName(),Toast.LENGTH_SHORT).show();
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//判断当前滚动状态
if (scrollState==SCROLL_STATE_FLING){
Toast.makeText(MainActivity.this,"滑动了一下",Toast.LENGTH_SHORT).show();
}else if (scrollState==SCROLL_STATE_IDLE){
Toast.makeText(MainActivity.this,"停止了滑动",Toast.LENGTH_SHORT).show();
}else if (scrollState==SCROLL_STATE_TOUCH_SCROLL){
Person person=new Person("xinxin",R.drawable.ic_launcher_background);
listData.add(person);
//通知UI线程刷新界面listView
adapter.notifyDataSetChanged();
}
Log.d("mydug", "onItemClick: -----");
}
}
2.自定义BaseAdapter适配RecyclerView
1创建数据模型Person类
public class Person {
private String name;
private int img;
public Person(String name, int img) {
this.name = name;
this.img = img;
}
public Person() {
}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
}
2创建自定义Adapter
public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.MyViewHolder> {
private List<Person> personData=new ArrayList<Person>();
private Context context;
//为接口设置set方法
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
//定义监听
private OnItemClickListener mOnItemClickListener;
public MyRecycleAdapter(List<Person> personData, Context context) {
this.personData = personData;
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//填充布局获取列表项布局文件
View itemview= LayoutInflater.from(context).inflate(R.layout.bookitem,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(itemview);
return myViewHolder;
}
//填充onCreateViewHolder方法返回的holder中的控件
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
//获取通讯录数据
Person person=personData.get(position);
holder.myimg.setImageResource(person.getImg());
holder.myname.setText(person.getName());
//设置点击事件
if (mOnItemClickListener!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.OnItemClickListener(holder.itemView,position);
}
});
}
}
@Override
public int getItemCount() {
return personData.size();
}
//定义一个内部类
class MyViewHolder extends RecyclerView.ViewHolder{
private ImageView myimg;
private TextView myname;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
//获取对应的列表项
myimg=itemView.findViewById(R.id.item_img);
myname=itemView.findViewById(R.id.item_name);
}
}
}
3、创建自定义接口
public interface OnItemClickListener {
//点击监听
public void OnItemClickListener(View view,int position);
}
4创建RecyclerView的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/item_img"
android:layout_width="26dp"
android:layout_height="90dp"
android:layout_weight="1"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/item_name"
android:layout_weight="1"
android:text="TextView"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
5、主布局文件
<androidx.constraintlayout.widget.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=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/myrecyclView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.con
6Activity文件
public class MainActivity extends AppCompatActivity {
private RecyclerView myrecyclerView;
private MyRecycleAdapter adpter;
private String[] names=new String[]{"中国慕课大学","华北电力大学","中国人民大学","北京大学","清华大学",
"中央财经大学","中国政法大学","北京理工大学","北京航空航天大学","北京外国语大学","中国传媒大学","中国民族大学",
"中国矿业大学","中国地质大学","中国科技大学"};
private int [] images=new int[]{R.drawable.navigate01,R.drawable.navigate02,R.drawable.navigate03,R.drawable.navigate04,
R.drawable.navigate05,R.drawable.navigate06,R.drawable.navigate07,R.drawable.navigate08,R.drawable.navigate09,
R.drawable.navigate10,R.drawable.navigate11,R.drawable.navigate12,R.drawable.navigate13,R.drawable.navigate14,R.drawable.navigate15,
R.drawable.navigate16,R.drawable.navigate17,R.drawable.navigate18};
//定义一个列表作为数据源
private List<Person> listData=new ArrayList<Person>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
//1初始化控件
myrecyclerView=findViewById(R.id.myrecyclView);
//2设置RecyclerView布局管理器
myrecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.HORIZONTAL,false));
//3初始化数据适配器
adpter=new MyRecycleAdapter(listData,MainActivity.this);
//4设置动画
myrecyclerView.setItemAnimator(new DefaultItemAnimator());
//5设置适配器
myrecyclerView.setAdapter(adpter);
//6设置监听器
adpter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void OnItemClickListener(View view, int position) {
Person person=listData.get(position);
Toast.makeText(MainActivity.this,person.getName(),Toast.LENGTH_SHORT).show();
}
});
}
private void initData(){
for (int i=0; i<names.length; i++){
//新建person对象
Person person=new Person(names[i],images[i]);
//将对象加入到list列表中
listData.add(person);
}
}
}