慕课大学基于Android P 的移动应用开发之第6章ListView

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文件

扫描二维码关注公众号,回复: 8743770 查看本文章
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);
        }
    }
}
发布了24 篇原创文章 · 获赞 1 · 访问量 195

猜你喜欢

转载自blog.csdn.net/weixin_43745804/article/details/104047956