zoukankan      html  css  js  c++  java
  • (1)Adapter适配器(ArrayAdapter、SimpleAdapter、BaseAdapter)

    ArrayAdapter(数组适配器)

    ArrayAdapter只能显示一行文本数据

    ArrayAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull T[] objects) {
            this(context, resource, 0, Arrays.asList(objects))
    
    • 参数说明:

      1. context上下文对象
        
      2. 每一个item的样式,(可使用系统提供,也可自定义)
        系统提供的样式如下
        - simple_list_item1:单独的一行文本框
        - simple_list_item2:两个文本框
        - simple_list_item_checked:每项是一个已选中的列表项
        - simple_list_multiple_choice:复选框
        - simple_list_item_single_choice:单选框
        
      3. 数据源
        
    • Adapter的使用:

      • 第一种方式

        1.初始化适配器

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_expandable_list_item1,datas);
    
      2.绑定适配器
    
    listView.setAdapter(adapter);
    
    • 第二种方式

    在resvalue下创建数组资源的xml文件:arrays.xml

    获取xml中String数组

     String name[] = getResources().getStringArray(R.array.myArray);
    

    SimpterAdapter【简单适配器】

    new SimpleAdapter(MainActivity.this,lists,R.layout.list_item
    ,new String[]{"image","theme","content"}
    ,new int[]{R.id.image1,R.id.text1,R.id.text2});

    • 参数说明

      • 1.上下文对象
      • 2.数据源,常是一个含Map的集合
      • 3.item的布局文件
      • 4.new String[]{}数组,与第2个参数中存入的map集合里的key值一一对应
      • new int[],第三个参数中的item里面的控件id
    • 基本案例

    <?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"
        android:orientation="vertical">
        <ListView
            android:id="@+id/ll1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </ListView>
    </LinearLayout>
    

    item样式

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:orientation="horizontal">
        <ImageView
            android:id="@+id/image1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="5dp"/>
       <LinearLayout
           android:id="@+id/ll2"
           android:layout_width="match_parent"
           android:layout_height="100dp"
           android:orientation="vertical"
           android:layout_marginTop="5dp"
           android:layout_marginLeft="10dp">
           <TextView
               android:id="@+id/text1"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="哈哈"
               android:textSize="30sp"
               android:layout_marginTop="10dp"/>
           <TextView
               android:id="@+id/text2"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="哈哈哈哈哈"
               android:textSize="24dp"
               android:layout_marginTop="10dp"/>
       </LinearLayout>
    </LinearLayout>
    

    Java文件

    package com.example.test3;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    public class MainActivity extends Activity{
    //    这三个经常是同时出现的
        private List<Map<String,Object>> lists;
        private SimpleAdapter adapter;
        private ListView listView;
    //    定义数据
        private String[] theme = {"张三","李四","王五"};
        private String[] content ={"我是张三,你好","我是李四,你好","我是王五,你好"};
        private int[] imageViews = {R.mipmap.ic_launcher,R.mipmap.ic_account,R.mipmap.ic_password};
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView = (ListView) findViewById(R.id.ll1);
    //        准备数据源
            lists = new ArrayList<>();
            for(int i = 0;i < theme.length;i++){
                Map<String,Object> map =new HashMap<>();
                map.put("image",imageViews[i]);
                map.put("theme",theme[i]);
                map.put("content",content[i]);
                lists.add(map);
            }
            adapter = new SimpleAdapter(MainActivity.this,lists,R.layout.list_item
                    ,new String[]{"image","theme","content"}
                    ,new int[]{R.id.image1,R.id.text1,R.id.text2});
            listView.setAdapter(adapter);
        }
    }
    

    效果图

    BaseAdapter

    自定义adapter

    package com.example.test3;
    
    import android.content.Context;
    import android.text.Layout;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by coder-tu on 2016/1/13.
     */
    public class MyAdapter extends BaseAdapter {
        private List<Message> Datas;
        private Context mContext;
    
        public MyAdapter(List<Message> datas, Context mContext) {
            Datas = datas;
            this.mContext = mContext;
        }
    
        /**
         * 返回item的个数
         * @return
         */
        @Override
        public int getCount() {
            return Datas.size();
        }
    
        /**
         * 返回每一个item对象
         * @param i
         * @return
         */
        @Override
        public Object getItem(int i) {
            return Datas.get(i);
        }
    
        /**
         * 返回每一个item的id
         * @param i
         * @return
         */
        @Override
        public long getItemId(int i) {
            return i;
        }
    
        /**
         * 暂时不做优化处理,后面会专门整理BaseAdapter的优化
         * @param i
         * @param view
         * @param viewGroup
         * @return
         */
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            view = LayoutInflater.from(mContext).inflate(R.layout.list_item,viewGroup,false);
            ImageView imageView = (ImageView) view.findViewById(R.id.image1);
            TextView textView1 = (TextView) view.findViewById(R.id.text1);
            TextView textView2 = (TextView) view.findViewById(R.id.text2);
            imageView.setImageResource(Datas.get(i).getImageId());
            textView1.setText(Datas.get(i).getTheme());
            textView2.setText(Datas.get(i).getContent());
    //        此处需要返回view 不能是view中某一个
            return view;
        }
    }
    

    Java文件

    package com.example.test3;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class MainActivity extends Activity{
    //    这三个经常是同时出现的
        private List<Message> lists;
        private MyAdapter adapter;
        private ListView listView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView = (ListView) findViewById(R.id.ll1);
            lists = new ArrayList<>();
            lists.add(new Message(R.mipmap.ic_launcher,"张三","你好,我是张三"));
            lists.add(new Message(R.mipmap.ic_account,"李四","你好,我是李四"));
            lists.add(new Message(R.mipmap.ic_password,"王五","你好,我是王五"));
            adapter = new MyAdapter(lists,MainActivity.this);
            listView.setAdapter(adapter);
        }
    }
    
    • BaseAdapter的优化

    努力做最期待的自己。
  • 相关阅读:
    C#基本数据类型
    ASP.NET MVC 实现二级域名
    asp.net下通过泛解析和伪静态实现二级域名的实现方法
    Web Forms vs Web MVC
    WebForm页面生命周期及asp.net运行机制
    波函数坍缩
    whoami
    wstngfw中使用虚拟IP映射内网IP
    Thread-specific data(TSD)线程私有数据
    Libev库学习
  • 原文地址:https://www.cnblogs.com/lyszyl/p/10649683.html
Copyright © 2011-2022 走看看