2024年Android最全实例教程八:采用ListView实现数据列表显示,2024年最新被面试官问的android问题难倒了怎么办

最后

文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

  • Android进阶学习全套手册
    关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。

  • Android高级架构师进阶知识体系图
    关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!

  • Android对标阿里P7学习视频

  • BATJ大厂Android高频面试题
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!




package cn.itcast.db;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import cn.itcast.domain.Person;

import cn.itcast.domain.PersonAdapter;

import cn.itcast.service.PersonService;

import android.app.Activity;

import android.database.Cursor;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.SimpleCursorAdapter;

import android.widget.Toast;

import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {

    //在Android平台上,集成了一个嵌入式关系型数据库——SQLite

    //SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型

    //虽然它支持的类型只有5种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p, s)等数据

    //只不过在运行或保存时会转成对应的五种数据类型

    //SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么



    private ListView lstShow;

    private PersonService personService;



    @Override

    public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);



            personService \= new PersonService(this);                

            lstShow \= (ListView)this.findViewById(R.id.lstShow);

            lstShow.setOnItemClickListener(new ItemClickListener());

            //show();

            //show2();

            show3();

    }

    

    private final class ItemClickListener implements OnItemClickListener{

            @Override

            public void onItemClick(AdapterView<?> parent, View view, int position,

                            long id) {

                    

                    ListView lView \= (ListView)parent;

                    //和show()3配对

                    Person person = (Person)lView.getItemAtPosition(position);

                    Toast.makeText(getApplicationContext(), person.getId().toString(), 1).show();

                    

                    //和show()2配对

                    Cursor cursor = (Cursor)lView.getItemAtPosition(position);

                    int personId = cursor.getInt(cursor.getColumnIndex("\_id"));

                    Toast.makeText(getApplicationContext(), personId, 1).show();

                    

                    //和show()配对

                    List<HashMap<String, Object>> hashMap = (List<HashMap<String, Object>>)lView.getItemAtPosition(position);

                    int Id = Integer.valueOf(hashMap.get(personId).get("personId").toString());

                    Toast.makeText(getApplicationContext(), Id, 1).show();

            }                

    }



    //自定义适配器

    private void show3() {

            List<Person> persons = personService.getScrollData(0, 20);

            PersonAdapter adapter \= new PersonAdapter(this, persons, R.layout.item);

            lstShow.setAdapter(adapter);

    }



    private void show2() {

            Cursor cursor \= personService.getCursorScrollData(0, 20);

            SimpleCursorAdapter adapter \= 

                    new SimpleCursorAdapter(this, R.layout.item, cursor,

                                    new String\[\]{"name", "phone", "amount"}, 

                                    new int\[\]{R.id.txtName, R.id.txtPhone, R.id.txtAmount});

            lstShow.setAdapter(adapter);

            

            //直接运行会报错,原因是SimpleCursorAdapter要求结果集中必须包含\_id字段

            //修复方法:1.把数据库表中的主键名称personId改为\_id

            //2.处理查询后的结果集

    }



    private void show() {

            List<Person> persons = personService.getScrollData(0, 20);

            List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

            for(Person person : persons){

                    HashMap<String, Object> item = new HashMap<String, Object>();

                    item.put("name", person.getName());

                    item.put("phone", person.getPhone());

                    item.put("amount", person.getAmount());

                    item.put("id", person.getId());

                    data.add(item);

            }

            SimpleAdapter adapter \= new SimpleAdapter(this, data, R.layout.item,

                            new String\[\]{"name", "phone", "amount"}, 

                            new int\[\]{R.id.txtName, R.id.txtPhone, R.id.txtAmount});

            lstShow.setAdapter(adapter);

            //listView内部操作过程

            //{

            //        int total = adapter.getCount(); //用于得到数据总数

            //        int perpage = 7;

            //        for (int i = 0; i < perpage; i++) {

            //                View view = adapter.getView(i, convertView, parent); //用于得到条目对应的View

            //                //显示条目

            //        }

            //}

    }

}




package cn.itcast.domain;

import java.util.List;

import cn.itcast.db.R;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

public class PersonAdapter extends BaseAdapter {

    private List<Person> persons; //绑定数据

    private int resource; //绑定条目界面

    private LayoutInflater inflater;

    

    public PersonAdapter(Context context, List<Person> persons, int resouce){

            this.persons = persons;

            this.resource = resource;

            inflater \= (LayoutInflater)context.getSystemService(Context.LAYOUT\_INFLATER\_SERVICE);

    }



    @Override

    public int getCount() {

            return persons.size(); //得到数据总数

    }



    @Override

    public Object getItem(int position) {

            return persons.get(position);

    }



    @Override

    public long getItemId(int position) {

            return position;

    }



    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

            TextView txtName \= null;

            TextView txtPhone \= null;

            TextView txtAmount \= null;

            //这样提升性能

            if(convertView == null){ //表明现在是第1页

                    inflater.inflate(resource, null); //生成条目界面对象

                    

                    txtName \= (TextView)convertView.findViewById(R.id.txtName);

                    txtPhone \= (TextView)convertView.findViewById(R.id.txtPhone);

                    txtAmount \= (TextView)convertView.findViewById(R.id.txtAmount);

                    

                    ViewCache cache \= new ViewCache();

总结

首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。

另外一部分原因在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。

之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。

下一步还是要查漏补缺,进行针对性复习。

最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

不要犯和我一样的错误呀!!!一定要看完!**
[外链图片转存中…(img-9kGCDA6b-1715632241191)]

[外链图片转存中…(img-O3Pd0xnt-1715632241192)]

[外链图片转存中…(img-YtJrz66z-1715632241192)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值