关于android:android-ListView2

一、 指标

  1. 把握实现自定义适配器的办法
  2. 学会应用自定义适配器实现图文混搭列表
  3. 了解自定义适配器原理
  4. 学会应用Selector北京选择器

二、自定义Adapter

  1. 继承BaseAdapter
  2. 实现getView
  3. 关联ListView

代码


public class MyAdapter extends BaseAdapter {

    /**
     * 数据集和
     */
    List<Map<String, Object>> list;

    /**
     * 布局反射器(布局文件反射未布局对象)
     */
    LayoutInflater inflater;

    /**
     * 结构器
     */
    public MyAdapter(Context context){
        this.inflater = LayoutInflater.from(context);
    }

    /**
     * 传入数据汇合
     */
    public void setList(List<Map<String, Object>> list){
        this.list = list;
    }


    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        View view = inflater.inflate(R.layout.item, null);
        ImageView logo = view.findViewById(R.id.logo);
        TextView title = view.findViewById(R.id.title);
        TextView version = view.findViewById(R.id.version);
        TextView size = view.findViewById(R.id.size);

        Map<String, Object> map = list.get(position);
        logo.setImageResource((Integer)map.get("logo"));
        title.setText((String)map.get("title"));
        title.setText((String)map.get("title"));
        size.setText((String)map.get("size"));

        return view;
    }
}

调用

// 自定义Adapter
        MyAdapter myAdapter = new MyAdapter(this);
        myAdapter.setList(list);

三、ListView点击事件

名称 阐明
onItemClick Item项点击事件
onItemLongClick Item项长按事件

在onCreate中:

 lv.setOnItemClickListener(this);
 lv.setOnItemLongClickListener(this);
 @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        Toast.makeText(this, "点击"+position, Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
        Toast.makeText(this, "长按"+position,  Toast.LENGTH_SHORT);
        return true;
    }
四、事件的消化
名称 阐明
true 示意消化掉事件,事件不会再持续传递
false 示意事件不消化,持续往下传递

五、选中背景切换的问题

问题:

  • Item项选中后的背景色彩是否能够自定义?
  • Button按钮点击后的背景图是否能够自定义?

答案(用Selector背景选择器实现以上成果)

六、Selector背景选择器

  • 是drawable文件夹下的一种资源文件(.xml)
  • 在其中能够定义多种不同状态下的控件背景
  • 罕用的状态如下表所示
名称 阐明
android:state_pressed 控件是否被按压
android:state_focus 控件是否取得焦点
android:state_selected 空间是否被选中
android:state_enabled 控件是否可用

总结

  • 自定义适配器是利用最广的适配器,须要继承BaseAdapter,并重写办法
  • 自定义适配器的外围办法是getView(),在该办法中通过LayoutInflater反射出行布局对象,并填充上数据内容
  • ListView最重要的工夫是item的点击事件和长按事件,同一时间内如果只想触发一个事件,能够再长安解决的最初返回true。
  • 在android中,能够通过Selector来实现控件背景的主动切换。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理