广告
返回顶部
首页 > 资讯 > 移动开发 >Android移动应用开发学习笔记(listview和适配器的使用)
  • 121
分享到

Android移动应用开发学习笔记(listview和适配器的使用)

开发学习学习笔记学习应用开发listviewAndroid 2022-06-06 13:06:05 121人浏览 安东尼
摘要

参考:https://www.bilibili.com/video/BV1fs411h7nF 视频做的笔记 文章目录1、用listview和BaseAdapter实现listView的入门1.1、布局文件1.2、MainActivi

参考:https://www.bilibili.com/video/BV1fs411h7nF 视频做的笔记

文章目录1、用listview和BaseAdapter实现listView的入门1.1、布局文件1.2、MainActivity类2、listview的优化2.1、listview优化的原因:2.2、优化处理:3、listview显示复杂页面(在listview的一个item中显示图片和文字)3.1、activity_main.xml文件3.2、模板item.xml文件3.3、MainActivity 类4、获取打气筒的常用的api4.1、第一种4.2、第二种4.3、第三种5、ArrayAdapter的使用5.1、activity_main.xml文件5.2、item.xml文件5.3、MainActivity 文件6、SimpleAdapter的使用6.1、activity_main.xml文件6.2、MainActivity类7、将数据库中查询出的数据显示到listview中7.1、activity_main.xml文件7.2、item.xml文件7.3、MyOpenHelper类(数据库文件)7.4、MainActivity类8、BaseAdapter、SimpleAdapter、ArrayAdapter三者的区别 1、用listview和BaseAdapter实现listView的入门 在布局中定义listview控件 定义自己的适配器继承BaseAdapter 实现getCount和getView方法 1.1、布局文件

1.2、MainActivity类
package com.dsl.listView;
import Android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到相应的控件
        ListView lv = (ListView) findViewById(R.id.lv);
        //显示数据
        lv.setAdapter(new MyListAdapter());
    }
    //定义listview适配器
    private class MyListAdapter extends BaseAdapter{
        //展示一共有多少条数据需要显示
        @Override
        public int getCount() {
            return 100000000;
        }
        //返回指定position位置对应的对象
        @Override
        public Object getItem(int position) {
            return null;
        }
        //返回position位置对应的id
        @Override
        public long getItemId(int position) {
            return 0;
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                //创建新的view对象
                 TextView textView= new TextView(MainActivity.this);
            textView.setText("嘻嘻嘻"+position);
            return textView;
        }
    }
}
2、listview的优化 2.1、listview优化的原因:

在使用ListView控件的过程中,由于加载条目过多,在滑动时可能造成卡顿。这是因为ListView在当前屏幕有多少个条目,就会创建多少个对象,每一个条目都是一个对象。在滑动时,滑出屏幕的条目对象会被销毁,新加载到屏幕上的条目会创建新的对象,这样在ListView快速滑动时就会重复一个过程:【创建对象】–>【销毁对象】–>【创建对象】,并且每一个条目都需要加载一次布局,加载布局时会不断进行findViewById()操作初始化控件,而布局XML文件是以树形进行加载,每次加载一个条目都需要从根节点进行初始化,这样对内存消耗也比较大,并且浪费时间。为此就需要对ListView进行优化,优化的目的是在滑动时不会重复创建对象,减少内存消耗和屏幕渲染处理。

2.2、优化处理:

//将上面的getView方法可以替换为下面的代码进行优化
  public View getView(int position, View convertView, ViewGroup parent) {
            TextView textView;
            if (convertView==null){
                //创建新的view对象
                textView = new TextView(MainActivity.this);
            }else{
                //复用历史缓存对象
                textView = (TextView) convertView;
            }
            textView.setText("嘻嘻嘻嘻"+position);
            return textView;
        }
3、listview显示复杂页面(在listview的一个item中显示图片和文字) 在activity_main.xml布局文件中定义listview 定义要显示数据的模板布局文件 定义自己的适配器显示数据 3.1、activity_main.xml文件

3.2、模板item.xml文件

3.3、MainActivity 类
package com.dsl.listview3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView) findViewById(R.id.lv);
        lv.setAdapter(new MyAdapter());
    }
    private class MyAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            return 7;
        }
        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view;
            if (convertView==null){
                
             view = View.inflate(getApplication(), R.layout.item, null);
            }else{
                view = convertView;
            }
            return view;
        }
    }
}
4、获取打气筒的常用的api 4.1、第一种
 				
            	 View  view = View.inflate(getApplication(), R.layout.item, null);
4.2、第二种
	 View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);              
4.3、第三种
       LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
       View view = inflater.inflate(R.layout.item, null);
5、ArrayAdapter的使用 在activity_main.xml文件定义listview控件 定义模板item.xml文件 通过适配器显示listview 5.1、activity_main.xml文件

5.2、item.xml文件

5.3、MainActivity 文件
package com.dsl.ArrayAdapter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
	String objects[] = {"一","二","三","四","五","六"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView) findViewById(R.id.lv);
        //创建一个arrayadapter
        ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.tv, objects);
        //设置数据适配器
        lv.setAdapter(adapter);
    }
}
6、SimpleAdapter的使用 6.1、activity_main.xml文件

6.2、MainActivity类
package com.dsl.simpleadapter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
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 AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView) findViewById(R.id.lv);
        //准备listview要显示的数据
        List<Map> data = new ArrayList();
        Map map1 = new HashMap();
        map1.put("name","鲁智深");
        map1.put("phone","132546");
        Map map2 = new HashMap();
        map2.put("name","林冲");
        map2.put("phone","1478");
        Map map3 = new HashMap();
        map3.put("name","张飞");
        map3.put("phone","110");
        Map map4 = new HashMap();
        map4.put("name","赵云");
        map4.put("phone","112");
        Map map5 = new HashMap();
        map5.put("name","关羽");
        map5.put("phone","119");
        //把map加入到集合中
        data.add(map1);
        data.add(map2);
        data.add(map3);
        data.add(map4);
        data.add(map5);
        
        SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(), data, R.layout.item, new String[]{"name", "phone",}, new int[]{R.id.tv_name, R.id.tv_phone});
        //设置数据适配器
        lv.setAdapter(simpleAdapter);
    }
}
7、将数据库中查询出的数据显示到listview中 在布局中添加listview、查询、添加等控件 定义模板文件item.xml 自定义类继承sqliteOpenHelper实现创建数据库 自定义类继承BaseAdapter实现适配器的操作 写sql语句实现增加和查询 7.1、activity_main.xml文件

   
7.2、item.xml文件

7.3、MyOpenHelper类(数据库文件)
package com.dsl.SqlAndList;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyOpenHelper extends SQLiteOpenHelper {
    
    public MyOpenHelper(Context context) {
        super(context, "test.db", null, 5);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("==========");
        db.execSQL("alter table info add python varchar(20)");
    }
}
7.4、MainActivity类
package com.dsl.SqlAndList;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private  MyOpenHelper myOpenHelper;
    List lists;
    ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lists= new ArrayList();
         lv = (ListView) findViewById(R.id.lv);
        myOpenHelper = new MyOpenHelper(getApplicationContext());
    }
    public void add(View v){
        //获得数据库对象
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        //执行增加语句
       // db.execSQL("insert into info(name,phone) values(?,?)",new Object[]{"李四","123456"});
        
        ContentValues values = new ContentValues();
        values.put("name","李四");
        values.put("phone","120");
        //返回值代表插入新行的id
        long info = db.insert("info", null, values);
        //数据库用完要关闭
        db.close();
        if(info>0){
                Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_SHORT).show();
        }else{
                 Toast.makeText(getApplicationContext(),"添加失败",Toast.LENGTH_SHORT).show();
        }
    }
    public void query(View v){
        SQLiteDatabase db = myOpenHelper.getWritableDatabase();
        
        Cursor cursor = db.query("info",new String[]{"name", "phone"},null,null, null, null, null);
        if (cursor!=null&&cursor.getCount()>0){
            while(cursor.moveToNext()){
                String name = cursor.getString(0);
                String phone = cursor.getString(1);
               //把数据封装到javabean中‘
                Person p = new Person();
                p.setName(name);
                p.setPhone(phone);
                lists.add(p);
            }
            //设置数据适配器
            lv.setAdapter(new MyAdapter());
        }
    }
    private class MyAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            return lists.size();
        }
        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view;
            if (convertView==null){
                 view = View.inflate(getApplicationContext(), R.layout.item, null);
            }else{
                view = convertView;
            }
            //找到控件用来显示数据
            TextView name = (TextView)view.findViewById(R.id.tv_name);
            TextView phone = (TextView) view.findViewById(R.id.tv_phone);
            //如何显示数据
            Person person = lists.get(position);
            name.setText(person.getName());
            phone.setText(person.getPhone());
            return view;
        }
    }
}
8、BaseAdapter、SimpleAdapter、ArrayAdapter三者的区别

BaseAdapter:自定义的东西很多,可以做很多复杂的界面显示,更加灵活
SimpleAdapter:SimpleAdapter的扩展性最好,可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),也是只是单纯的负责显示.
ArrayAdapter:只可以简单的显示一行文本


作者:何渡?


--结束END--

本文标题: Android移动应用开发学习笔记(listview和适配器的使用)

本文链接: https://www.lsjlt.com/news/29279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作