Android 对listview数据的增删改查

合集下载

android listview的用法

android listview的用法

android listview的用法
Android中的ListView是一种可以显示垂直列表的滚动控件。

它为用户提供了一种可以浏览许多项目,而无需滚动屏幕的便捷方式。

ListView通常用来显示一组有序的数据,这些数据可以是文本,图像,或者其他任意形式的内容。

ListView可以包含任意数量的项目,而不会对屏幕上的性能造成影响。

使用ListView时,必须将它与ArrayAdapter(或其他类型的适配器)结合起来,这样ListView才能正确地显示数据。

ArrayAdapter可以将数据转换为ListView可以显示的格式。

要实现ListView,首先要在布局文件中定义ListView,然后在Activity中初始化ListView,并将ArrayAdapter与ListView绑定。

最后,可以为ListView 注册一个OnItemClickListener监听器,用于处理项目被单击时发生的事件。

android之sqlite实现增删改查

android之sqlite实现增删改查

Sqlite 实现简单的增删改查主界面:功能实现:1)增加数据:2)全部显示3)清除显示4)全部删除5):ID删除6)ID查询:7)ID更新:主要代码段:DBOpenHelper.javapackage com.chen.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class DBOpenHelper extends SQLiteOpenHelper { private static final int VERSION=2;//版本private static final String DBNAME="user.db";//数据库名字//创建数据库public DBOpenHelper(Context context) {super(context, DBNAME, null, VERSION);}@Override/** 创建表*/public void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists u_user(_id integer primary key,name varchar(20),age integer,tall varchar(5))");}//版本被更新时执行@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}UserDAO.javapackage com.chen.dao;import java.util.ArrayList;import java.util.List;import er;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class UserDAO {private DBOpenHelper helper;//写入,不然会是出错,是空指针public UserDAO(Context context){helper=new DBOpenHelper(context);}/*** 添加用户信息*/public void add(User user){SQLiteDatabase db=helper.getWritableDatabase();String sql="Insert into u_user(_id,name,age,tall) values(?,?,?,?)";db.execSQL(sql, new Object[]{user.getId(),user.getName(),user.getAge(),user.getTall()});db.close();}/*** 删除用户信息*/public void delete(Integer...id){if(id.length>0){StringBuffer sb=new StringBuffer();for(int i=0;i<id.length;i++){sb.append("?").append(",");}sb.deleteCharAt(sb.length()-1);SQLiteDatabase database=helper.getWritableDatabase();String sql="delete from u_user where _id in ("+sb+")";database.execSQL(sql, (Object[])id);}}/*** 删除表里的全部数据*/public void delelteall(){SQLiteDatabase database=helper.getWritableDatabase();String sql = "delete from u_user";database.execSQL(sql);}/*** 用户修改*/public void update(User user){SQLiteDatabase db=helper.getWritableDatabase();//写入数据库中注意!!!!不能放在外面String sql="update u_user set name=?,age=?,tall=? where _id=?";db.execSQL(sql, new Object[]{user.getName(),user.getAge(),user.getTall(),user.getId()});}/*** 查找用户信息*/public User find(int userid){SQLiteDatabase db=helper.getWritableDatabase();//写入数据库中注意!!!!不能放在外面String sql="select _id,name,age,tall from u_user where _id=?";Cursor cursor=db.rawQuery(sql, new String[]{String.valueOf(userid)});if(cursor.moveToNext()){return new User(cursor.getInt(cursor.getColumnIndex("_id")),cursor.getString(cursor.getColumnIndex("name")),cursor.getInt(cursor.getColumnIndex("age")),cursor.getString(cursor.getColumnIndex("tall")));}return null;}/*** 显示用户*/public Cursor select() {SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.query("u_user",null, null, null, null,null, "_id desc");return cursor;}}MainActivity.javapackage com.chen.database;/*** writer:ManMan*Email:*******************/import erDAO;import er;import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{ private static final String TAG = "Add";private EditText edname,edage,edtall,id;private Button add,deleteshow,show,iddelete,idupdate,idshow,deleteall;private TextView tedatashow;private ListView datashow;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);edname = (EditText)findViewById(R.id.edname);edage = (EditText)findViewById(R.id.edage);edtall = (EditText)findViewById(R.id.edtall);id = (EditText)findViewById(R.id.id);tedatashow = (TextView)findViewById(R.id.tedatashow);datashow = (ListView)findViewById(R.id.datashow);add = (Button)findViewById(R.id.add);deleteshow = (Button)findViewById(R.id.deleteshow);show = (Button)findViewById(R.id.show);iddelete = (Button)findViewById(R.id.iddelete);idupdate = (Button)findViewById(R.id.idupdate);idshow = (Button)findViewById(R.id.idshow);deleteall = (Button)findViewById(R.id.deleteall);add.setOnClickListener(this);deleteshow.setOnClickListener(this);show.setOnClickListener(this);iddelete.setOnClickListener(this);idupdate.setOnClickListener(this);idshow.setOnClickListener(this);deleteall.setOnClickListener(this);}public void onClick(View v) {/** 添加数据*/if(v==add){if(!id.getText().toString().equals(null)&&!edname.getText().toString().equals(null)&&!edage .getText().toString().equals(null)&&!edtall.getText().toString().equals(null)){try{UserDAO userdao = new UserDAO(MainActivity.this);User user = new User(Integer.valueOf(id.getText().toString()), edname.getText().toString(),Integer.valueOf(edage.getText().toString()), edtall.getText().toString());userdao.add(user);Toast.makeText(MainActivity.this, "成功添加!", Toast.LENGTH_LONG).show();tedatashow.setText("新添数据为:"+"\n"+"ID:"+Integer.valueOf(id.getText().toString())+","+"姓名:"+edname.getText().toString()+","+"年龄:"+Integer.valueOf(edage.getText().toString())+","+"身高:"+edtall.getText().toString()+",");//设置为空edage.setText("");edname.setText("");edtall.setText("");id.setText("");}catch (Exception e) {Log.i(TAG, "出错了");Log.i(TAG, e.getMessage());}}else if(id.getText().toString().equals(null)){Toast.makeText(MainActivity.this, "ID不能为空!", Toast.LENGTH_LONG) .show();}}/** 清除显示*/if(v==deleteshow){tedatashow.setText("");}/** 全部显示*/if(v==show){try{UserDAO userdao = new UserDAO(MainActivity.this);Cursor cursor = userdao.select();/** 构建Listview适配器*/SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, yout.showuser, cursor, new String[]{"_id","name","age","tall" },newint[]{R.id.textView1,R.id.textView2,R.id.textView3,R.id.textView4});datashow.setAdapter(adapter);}catch (Exception f) {Log.e("err",f.getMessage());Log.e("err",null, f.getCause());Toast.makeText(MainActivity.this, "显示不了", Toast.LENGTH_LONG).show();}}/** ID删除*/if(v==iddelete){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面userDAO.delete(Integer.valueOf(id.getText().toString()));Toast.makeText(MainActivity.this, "您成功删除了"+Integer.valueOf(id.getText().toString()), Toast.LENGTH_LONG).show();id.setText("");}/** 全部删除*/if(v==deleteall){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面userDAO.delelteall();Toast.makeText(MainActivity.this, "您已经把数据全部删除了", Toast.LENGTH_LONG).show();}/** ID更新*/if(v==idupdate){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面User user=userDAO.find(Integer.valueOf(id.getText().toString()));user.setName(edname.getText().toString());user.setAge(Integer.valueOf(edage.getText().toString()));user.setTall(edtall.getText().toString());userDAO.update(user);Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_LONG).show();}/** ID查询*/if(v==idshow){UserDAO userDAO=new UserDAO(MainActivity.this);//注意不能放在外面User user=userDAO.find(Integer.valueOf(id.getText().toString()));tedatashow.setText("ID:"+user.getId()+" "+"姓名:"+user.getName()+" "+"年龄:"+user.getAge()+" "+"身高"+user.getTall());}/***/}}User.javapackage com.chen.modl;public class User {private int id;private String name;private int age;private String tall;/** 构造方法*/public User(){super();}public User(int id,String name,int age,String tall){ this.id=id;=name;this.age=age;this.tall=tall;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getTall() {return tall;}public void setTall(String tall) {this.tall = tall;}//复写toString()方法进行查找public String toString(){return"id:"+id+"name:"+name+"age"+age+"tall"+tall;}}Main.xml<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><!--姓名 --><TextViewandroid:text="姓名:"android:layout_width="wrap_content"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/edname"android:layout_height="wrap_content"android:layout_width="278dp"/></LinearLayout><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><!--年龄 --><TextViewandroid:text="年龄:"android:layout_width="wrap_content"android:layout_height="wrap_content"/><EditTextandroid:id="@+id/edage"android:layout_width="278dp"/></LinearLayout><!--身高 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content" ><TextViewandroid:text="身高:"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:id="@+id/edtall"android:layout_height="wrap_content"android:layout_width="278dp"/></LinearLayout><!--按钮 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/add"android:text="添加数据"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="3dip"/><Buttonandroid:id="@+id/show"android:text="全部显示"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/deleteshow"android:text="清除显示"android:layout_width="wrap_content"/><Buttonandroid:id="@+id/deleteall"android:text="全部删除"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout><!--按钮 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:text="ID:"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="3dip"android:layout_weight="1"/><EditTextandroid:id="@+id/id"android:layout_width="75dip"android:layout_height="wrap_content"android:layout_marginLeft="3dip"android:layout_weight="2"/><Buttonandroid:id="@+id/iddelete"android:text="ID删除"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dip"android:layout_weight="1"/><Buttonandroid:id="@+id/idshow"android:text="ID查询"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"/><Buttonandroid:id="@+id/idupdate"android:text="ID更新"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"/></LinearLayout><TextViewandroid:text="数据库数据显示:"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/tedatashow"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="15dip"/><ListViewandroid:id="@+id/datashow"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="15dip"/></LinearLayout>。

增删改查思路及步骤

增删改查思路及步骤

增删改查思路及步骤增删改查(CRUD)是计算机科学中常用的基本操作,用于对于数据存储系统(例如数据库)中的数据进行增加、删除、修改和查询操作。

以下是增删改查的思路以及一般步骤。

这四个操作是软件开发中最常见和重要的操作之一,对于数据的操作非常关键。

一、增加(Create):数据增加是指向数据库中添加数据。

常见的步骤如下:1.设计数据表结构:创建一个表格或者类来存储新数据,并确定字段类型、长度和关系。

2. 编写添加数据的代码:使用编程语言(如SQL、Python等)编写代码,来向数据库中添加数据。

3.执行代码:运行代码,将数据添加到数据库中。

二、删除(Delete):数据删除是指从数据库中删除数据。

常见的步骤如下:1.根据需求确定删除的条件:确定要删除的数据的特定条件,如ID、日期等。

2.编写删除数据的代码:使用编程语言编写代码,将符合条件的数据从数据库中删除。

3.执行代码:运行代码,删除数据库中的数据。

三、修改(Update):数据修改是指更新数据库中的数据,使其与最新的需求相适应。

常见的步骤如下:1.确定需要修改的数据:根据需求确定要修改的数据,并确定具体的修改内容。

2.编写修改数据的代码:使用编程语言编写代码,根据需求修改数据库中的数据。

3.执行代码:运行代码,将修改后的数据更新到数据库中。

四、查询(Retrieve):数据查询是指从数据库中获取数据。

1.确定查询的条件:根据需求确定查询的条件,如ID、日期、关键词等。

2.编写查询代码:使用编程语言编写代码,根据查询条件从数据库中获取数据。

3.执行查询:运行代码,执行查询并获得结果。

以上是增删改查的基本思路与步骤。

在现实的软件开发中,通常还会包含一些额外的处理,如输入验证、错误处理、事务处理等。

不同的编程语言和数据库系统可能有所不同的实现方式,但其基本概念和步骤大致相同。

在实际使用时,我们可以根据具体需求灵活应用以上步骤。

例如,对于数据库的设计,可以根据需要创建多个表格,并在表与表之间建立适当的关系。

android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查

android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查

android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查1:androidmanifest.xml的内容[html]view plaincopy1.<?xml version="1.0" encoding="utf-8"?>2.<manifest xmlns:android="/apk/res/android"3.package="cn.itcast.db"4.android:versionCode="1"5.android:versionName="1.0">6.<application android:icon="@drawable/icon" android:lab el="@string/app_name">7.<uses-library android:name="android.test.runner" />8.<activity android:name=".MainActivity"9.android:label="@string/app_name">10.<intent-filter>11.<action android:name="android.intent.action.MAIN" / >12.<category android:name=" UNCHER" />13.</intent-filter>14.</activity>15.16.</application>17.18.<uses-sdk android:minSdkVersion="8" />19.<!-- 配置测试环境 -->20.<instrumentation android:name="android.test.Instru mentationTestRunner"21.android:targetPackage="cn.itcast.db"22.android:label="T est for My App"/>23.24.</manifest>2:Person类[java]view plaincopy1.package cn.itcast.domain;2.3.public class Person {4.5.private Integer id;6.private String name;7.8.public Person() {9.10.}11.12.public Integer getId() {13.return id;14.}15.16.public void setId(Integer id) {17.this.id = id;18.}19.20.public String getName() {21.return name;22.}23.24.public void setName(String name) { = name;26.}27.28.@Override29.public String toString() {30.return "Person [id=" + id + ", name=" + name + "]";31.}32.33.}3:DBOpenHelper类,该类继承了SQLiteOpenHelper类[java]view plaincopy1.package cn.itcast.service;2.3.import android.content.Context;4.import android.database.sqlite.SQLiteDatabase;5.import android.database.sqlite.SQLiteOpenHelper;6.import android.database.sqlite.SQLiteDatabase.CursorFac tory;7.8.public class DBOpenHelper extends SQLiteOpenHelper {9.10.private static final String DATABASENAME = "cn.itcast. db";11.private static final int DATABASEVERSION = 1;12.13./*14.* 构造函数15.*/16.public DBOpenHelper(Context context) {17.super(context, DATABASENAME, null, DATABASEVERSION);18.}19.20./*21.* 数据库第一次生成时调用该方法,创建一些表或者初始化一些数据22.* @see android.database.sqlite.SQLiteOpenHelper#on Create(android.database.sqlite.SQLiteDatabase)23.*/24.@Override25.public void onCreate(SQLiteDatabase db) {26.db.execSQL("create table person(personid integer pri mary key autoincrement, name varchar(20))");27.}28.29.@Override30.public void onUpgrade(SQLiteDatabase db, int oldVer sion, int newVersion) {31.32.}33.34.}4:PersonService类[java]view plaincopy1.package cn.itcast.service;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import android.content.Context;7.import android.database.Cursor;8.import android.database.sqlite.SQLiteDatabase;9.import cn.itcast.domain.Person;10.11.public class PersonService {12.13.private DBOpenHelper dbOpenHelper;14.15.public PersonService(Context context) {16.this.dbOpenHelper = new DBOpenHelper(context);17.}18.19./*20.* save a person to the database21.*/22.public void save(Person person) {23.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();24.database.execSQL("insert into person(name) values (?) ", new Object[]{person.getName()});25.}26.27./*28.* updata a person to the database29.*/30.public void update(Person person) {31.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();32.database.execSQL("update person set name=? wherepersonid=?", new Object[]{person.getName(), person.getId()});33.}34.35./*36.* delete a person from the database according to the id37.*/38.public void delete(Integer id) {39.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();40.database.execSQL("delete from person where personi d=?", new Object[]{id.toString()});41.}42.43./*44.* find a person from the database according to the id45.*/46.public Person find(Integer id) {47.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();48.Cursor cursor = database.rawQuery("select * from per son where personid=?", new String[]{id.toString()});49.Person person = null;50.if(cursor.moveT oFirst()) {51.Integer personid = cursor.getInt(cursor.getColumnInd ex("personid"));52.String name = cursor.getString(cursor.getColumnIndex ("name"));53.person = new Person();54.person.setId(personid);56.}57.return person;58.}59.60./*61.* get the data of person accroding to the offset and m axResult62.*/63.public List<Person> getScrollData(Integer offset, Integ er maxResult) {64.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();65.Cursor cursor = database.rawQuery("select * from per son limit ?,?", new String[] {offset.toString(), maxResult.toString() });66.int idIndex = 0;67.int nameIndex = 0;68.List<Person> personList = null;69.70.if(cursor.getCount() >= 0) {71.idIndex = cursor.getColumnIndex("personid");Index = cursor.getColumnIndex("name");73.personList = new ArrayList<Person>();74.}75.76.while(cursor.moveToNext()) {77.Integer personid = cursor.getInt(idIndex);78.String name = cursor.getString(nameIndex);79.Person person = new Person();81.person.setName(name);82.personList.add(person);83.}84.return personList;85.}86.87./*88.* get the count of the database89.*/90.public long getCount(){91.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();92.Cursor cursor = database.rawQuery("select count(*) fr om person", null);93.cursor.moveToFirst();94.return cursor.getLong(0);95.}96.97.}5:PersonServiceT est类[java]view plaincopy1.package cn.itcast.db;2.3.import java.util.List;4.5.import android.test.AndroidTestCase;6.import android.util.Log;7.import cn.itcast.domain.Person;8.import cn.itcast.service.DBOpenHelper;9.import cn.itcast.service.PersonService;10.11.public class PersonServiceTest extends AndroidT estCase {12.private static final String TAG = "PersonServiceTest";13.14./*15.* 测试生成数据库的方法16.*/17.public void testCreateDB() throws Throwable {18.DBOpenHelper dbOpenHelper = new DBOpenHelper( this.getContext());19.dbOpenHelper.getWritableDatabase(); //第一次调用该方法会生成数据库20.21.}22.23./*24.* 测试保存方法25.*/26.public void testSave() throws Throwable{27.PersonService personService = new PersonService(this .getContext());28.29.Person person1 = new Person();30.person1.setName("zhangsan");31.personService.save(person1);32.33.Person person2 = new Person();34.person2.setName("lisi");35.personService.save(person2);36.37.Person person3 = new Person();38.person3.setName("wangwu");39.personService.save(person3);40.41.}42.43.public void testDelete() {44.PersonService personService = new PersonService(this .getContext());45.personService.delete(1);46.47.}48.49./*50.* 测试更新方法51.*/52.public void testUpdate() {53.PersonService personService = new PersonService(this .getContext());54.Person person = personService.find(1);55.person.setName("zhaoliu");56.personService.update(person);57.58.}59.60./*61.* 测试获得数据方法63.public void testGetScrollData() throws Throwable{64.PersonService personService = new PersonService(this .getContext());65.List<Person> persons = personService.getScrollData(0 , 3);66.for(Person person : persons) {67.Log.i(TAG, person.toString());68.}69.}70.71./*72.* 测试根据id查找的方法73.*/74.public void testFind() throws Throwable{75.PersonService personService = new PersonService(this .getContext());76.Person person = personService.find(1);77.Log.i(TAG, person.toString());78.79.}80.81./*82.* 测试获得数量的方法83.*/84.public void testGetCount() {85.PersonService personService = new PersonService(this .getContext());86.long count = personService.getCount();87.Log.i(TAG, count + "");89.}。

Android开发基础(习题卷13)

Android开发基础(习题卷13)

Android开发基础(习题卷13)第1部分:单项选择题,共70题,每题只有一个正确答案,多选或少选均不得分。

1.[单选题]以下设置TextView文字大小的代码错误的是()A)android:TextSize="12"B)android:TextSize="12sp"C)android:TextSize=12D)android:TextSize="12mm"答案:B解析:2.[单选题]Activity被某个AlertDialog遮住时处于什么状态()?A)运行B)暂停C)停止D)销毁答案:B解析:3.[单选题]下列关于Service 的描述,正确的是( )A)Servie 主要负责一些耗时比较长的操作,这说明Service 会运行在独立的子线程中B)每次调用Context 类中的StartService()方法后都会新建一个Service 实例C)每次启动一个服务时候都会先后调用onCreate()和onStart() 方法D)当调用了ConText 类中的StopService()方法后, Serviece 中的onDestroy()方法会自动回调答案:D解析:4.[单选题]关于BroadcastReceiver的说法不正确的是( ).A)广播接收器是android四大组件之一B)对有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者C)接收者声明的优先级别在的android:priority属性中声明,数值越大优先级别越高D)在配置文件manifest中配置接收器叫做动态注册答案:D解析:5.[单选题]以下属于调用摄像头硬件的权限的是: ( )A)<uses-permission android:name="android.permission.CAMERA"/>B)<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />C)<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>D)<uses-permission android:name="android.permission.INTERNET"/>答案:A解析:6.[单选题]编辑幻灯片时,允许撤消的操作次数( )。

Android开发基础(习题卷1)

Android开发基础(习题卷1)

Android开发基础(习题卷1)第1部分:单项选择题,共71题,每题只有一个正确答案,多选或少选均不得分。

1.[单选题]关于res/raw目录说法正确的是( )A)这里的文件是原封不动的存储到设备上不会转变为二进制的格式B)这里的文件是原封不动的存储到设备上会转变为二进制的格式C)这里的文件最终以二进制的格式存储到指定的包中D)这里的文件最终不会已二进制的格式存储到指定的包中答案:A解析:2.[单选题]下列代码输出的结果是:( )int i = 0;i = ++i + 8;Console.WriteLine(i++);A)8B)9C)10D)编译出现语法错误,不能运行答案:B解析:i = ++i + 8; 结果为9i++是先输出后加,所以为93.[单选题]查询手机系统短信时,内容提供者对应的 Uri 为( )。

A)Contacts.Photos.CONTENT_URIB)Contacts.People.CONTENT_URIC)"content://sms/"D)Media.EXTERNAL_CONTENT_URI答案:C解析:4.[单选题]在多个应用中读取共享存储数据时,需要用到的query 方法,是哪个对象的方法( )A)ContentResolverB)ContentProviderC)CursorD)SQLiteHelper答案:A解析:5.[单选题]以下哪个不是应用间交互常用的方法? ()A)接收Broadcast 的消息B)文件共享访问C)通过Content Resolver 接口访问D)Activity 的调用6.[单选题]下面关于广播叙述错误的是( )A)广播是Android 四大组件之一B)BroadcastReceiver 有两种注册方式,静态注册和动态注册C)静态注册需要在Mainfest.xml 中配置D)动态注册需要在应用退出时候接触广播的注册。

答案:A解析:7.[单选题]若要实现对系统联系人的增删改查,需要使用的系统ContentProvider的Uri为( )。

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显⽰数据的⽅法详解本⽂实例讲述了Android操作SQLite数据库(增、删、改、查、分页等)及ListView显⽰数据的⽅法。

分享给⼤家供⼤家参考,具体如下:由于刚接触android开发,故此想把学到的基础知识记录⼀下,以备查询,故此写的⽐较啰嗦:步骤如下:⼀、介绍:此⽂主要是介绍怎么使⽤android⾃带的数据库SQLite,以及把后台的数据⽤ListView控件显⽰⼆、新建⼀个android⼯程——DBSQLiteOperate⼯程⽬录:三、清单列表AndroidManifest.xml的配置为:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.dboperate"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" /><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name" ><!--单元测试加这句--><uses-library android:name="android.test.runner" /><activityandroid:name=".DBSQLiteOperateActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity></application><instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.dboperate"android:label="Test for my app"/></manifest>四、main.xml配置清单:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:id="@+id/name"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/name"android:gravity="center"/><TextViewandroid:id="@+id/phone"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/phone"android:gravity="center"/><TextViewandroid:id="@+id/amount"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/amount"android:gravity="center"/></LinearLayout><ListViewandroid:id="@+id/listView"android:layout_width="fill_parent"android:layout_height="fill_parent" ></ListView></LinearLayout>五、item.xml配置清单:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><TextViewandroid:id="@+id/name"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/name"android:gravity="center"/><TextViewandroid:id="@+id/phone"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/phone"android:gravity="center"/><TextViewandroid:id="@+id/amount"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/amount"android:gravity="center"/></LinearLayout>六、string.xml配置清单:<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, DBSQLiteOperateActivity!</string><string name="app_name">ExampleDBSQLiteOperate8</string><string name="name">姓名</string><string name="phone">电话</string><string name="amount">存款</string></resources>七、DBSQLiteOperateActivity.java Activity类的源码:package com.example.dboperate;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.example.adapter.PersonAdapter;import com.example.domain.Person;import com.example.service.PersonService;import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.SimpleCursorAdapter;import android.widget.Toast;public class DBSQLiteOperateActivity extends Activity {ListView listView;PersonService personService;OnItemClickListener listViewListener;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);listViewListener = new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//得到listView控件ListView listView = (ListView)parent;//1、如果使⽤⾃定义适配器,返回的是Person对象//得到该条⽬数据// Person person = (Person)listView.getItemAtPosition(position);// //⼴播出去// Toast.makeText(getApplicationContext(), person.toString(), Toast.LENGTH_LONG).show(); //2、如果使⽤showList2()⽅法中的适配器时,则取得的值是不⼀样的,返回的是cursor// Cursor cursor = (Cursor)listView.getItemAtPosition(position);// int personid = cursor.getInt(cursor.getColumnIndex("_id"));// Toast.makeText(getApplicationContext(), personid+"", Toast.LENGTH_LONG).show();//3、如果使⽤showList()⽅法中的适配器时,则取得的值是不⼀样的,返回的是map@SuppressWarnings("unchecked")Map<String,Object> map = (Map)listView.getItemAtPosition(position);String name = map.get("name").toString();String personid = map.get("personid").toString();Toast.makeText(getApplicationContext(), personid +"-"+ name, Toast.LENGTH_LONG).show(); }};listView = (ListView) this.findViewById(R.id.listView);listView.setOnItemClickListener(listViewListener);personService = new PersonService(this);showList();}private void showList() {List<Person> persons = personService.getScrollData(0, 50);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("personid", person.getId());data.add(item);}SimpleAdapter adapter = new SimpleAdapter(this,data,yout.item, new String[]{"name","phone","amount"}, new int[]{,R.id.phone,R.id.amount});listView.setAdapter(adapter);}public void showList2(){Cursor cursor = personService.getCursorScrollData(0, 50);//该适配器要求返回的结果集cursor必须包含_id字段,所以需要对取得结果集进⾏处理SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,yout.item,cursor,new String[]{"name","phone","amount"}, new int[]{,R.id.phone,R.id.amount} ); listView.setAdapter(adapter);}/*** ⾃定义适配器*/public void showList3(){List<Person> persons = personService.getScrollData(0, 50);/*** 第⼀个参数:上下⽂context,第⼆个参数:要显⽰的数据,第三个参数:绑定的条⽬界⾯*/PersonAdapter adapter = new PersonAdapter(this, persons, yout.item);listView.setAdapter(adapter);}}⼋、person.java 实体类源码:package com.example.domain;public class Person {private Integer id;private String name;private String phone;private Integer amount;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Person(String name, String phone) { = name;this.phone = phone;}public Person(Integer id, String name, String phone,Integer amount) {super();this.id = id; = name;this.phone = phone;this.amount = amount;}public Person() {super();}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", phone=" + phone+ ", amount=" + amount + "]";}}九、DBOperateHelper.java 业务类源码:package com.example.service;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOperateHelper extends SQLiteOpenHelper {public DBOperateHelper(Context context) {//默认创建的数据库⽂件保存在<包名>/database///第⼀个参数是上下⽂,第⼆个参数是数据库名称,第三个是游标⼯⼚为null时使⽤数据库默认的游标⼯⼚,第四个是数据库版本号但是不能为0,⼀般⼤于0super(context, "smallpig", null, 4);}/*** 数据库每⼀次被创建时被调⽤*/@Overridepublic void onCreate(SQLiteDatabase sqldb) {sqldb.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),phone varchar(12) null)");}/*** 每⼀次数据库版本号发⽣变动时触发此⽅法* ⽐如如果想往数据库中再插⼊⼀些表、字段或者其他信息时通过修改数据库版本号来触发此⽅法*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//db.execSQL("alter table person add phone varchar(12) null");\db.execSQL("alter table person add amount Integer null");}}⼗、PersonService.java 业务类源码:package com.example.service;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.domain.Person;public class PersonService {private DBOperateHelper dbOperateHelper;public PersonService(Context context) {this.dbOperateHelper = new DBOperateHelper(context);}/*** 保存记录* @param person*/public void save(Person person){//得到数据库实例,⾥⾯封装了数据库操作⽅法SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("insert into person(name,phone) values('"+person.getName()+"','"+person.getPhone()+"')");//利⽤占位符可以避免注⼊,但是注意数组参与与占位符对应的字段要⼀⼀对应sqldb.execSQL("insert into person(name,phone,amount) values(?,?,?)",new Object[]{person.getName(),person.getPhone(),person.getAmount()});//关闭数据库sqldb.close();}/*** 删除记录* @param id*/public void delete(Integer id){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.execSQL("delete from person where personid=?",new Object[]{id});sqldb.close();}/*** 更新记录* @param person*/public void update(Person person){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.execSQL("update person set name=?,phone=?,amount=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getAmount(),person.getId()}); sqldb.close();}/*** 通过ID查询记录* @param id* @return*/public Person find(Integer id){/*** getWritableDatabase 与 getReadableDatabase 的区别:* getReadableDatabase会先返回getWritableDatabase(可写),如果调⽤getWritableDatabase失败* 则才会调⽤getReadableDatabase后续⽅法,使数据库只读* 当写⼊的数据超过数据库⼤⼩则调⽤getWritableDatabase会失败* 所以只读时则可以使⽤此⽅法,其它情况(只要不是超过数据库⼤⼩)也可以使⽤此⽅法*/SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});int personid;String name;String phone;int amount;Person person = null;if(cursor.moveToFirst()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);}cursor.close();return person;}/*** 返回指定长度记录,limit 3,5,适⽤于分页* @param offset 起始* @param maxResult 长度* @return*/public List<Person> getScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)});int personid;String name;String phone;int amount;Person person = null;List<Person> persons = new ArrayList<Person>();while(cursor.moveToNext()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);persons.add(person);}cursor.close();return persons;}/*** 返回cursor* @param offset 起始* @param maxResult 长度* @return*/public Cursor getCursorScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select personid as _id,name,phone,amount from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); return cursor;}/*** 返回总记录数* @return*/public long getCount(){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select count(*) from person", null);//该查询语句值返回⼀条语句cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}public void payment(){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.beginTransaction();//开启事务try{sqldb.execSQL("update person set amount = amount -10 where personid=1");sqldb.execSQL("update person set amount = amount + 10 where personid=2");sqldb.setTransactionSuccessful();//设置事务标志位true} finally {//结束事务:有两种情况:commit\rollback,事务提交或者回滚是由事务的标识决定的//事务为ture则提交,事务为flase则回滚,默认为falsesqldb.endTransaction();}}}⼗⼀、OtherPersonService.java 业务类源码:package com.example.service;import java.util.ArrayList;import java.util.List;import com.example.domain.Person;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class OtherPersonService {private DBOperateHelper dbOperateHelper;public OtherPersonService(Context context) {this.dbOperateHelper = new DBOperateHelper(context);}/*** 保存记录* @param person*/public void save(Person person){//得到数据库实例,⾥⾯封装了数据库操作⽅法SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("insert into person(name,phone) values('"+person.getName()+"','"+person.getPhone()+"')");//利⽤占位符可以避免注⼊,但是注意数组参与与占位符对应的字段要⼀⼀对应//sqldb.execSQL("insert into person(name,phone) values(?,?)",new Object[]{person.getName(),person.getPhone()});ContentValues values = new ContentValues();values.put("name", person.getName());values.put("phone", person.getPhone());values.put("amount", person.getAmount());//第⼀个参数是表名,第三个为字段值集合,第⼆个参数是空值字段,当第三个字段值集合为空时,系统会⾃动插⼊⼀条第⼆个参数为空的sql语句//否则当第三个参数为空时,如果第⼆个参数也为空,那么插⼊表就会找不到插⼊的字段信息,会报错sqldb.insert("person", "name", values );//关闭数据库sqldb.close();}/*** 删除记录* @param id*/public void delete(Integer id){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("delete from person where personid=?",new Object[]{id});//第⼀个参数是表名,第⼆个是where后⾯的条件⽤占位符表⽰,第三个对应占位符为参数值sqldb.delete("person", "personid=?", new String[]{Integer.toString(id)});sqldb.close();}/*** 更新记录* @param person*/public void update(Person person){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("update person set name=?,phone=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getId()});//第⼀个参数为表名,第⼆个是⼀个更新值集合,采⽤键值对的形式,每个更新的字段对应更新值//第三个参数是where后⾯条件字段⽤占位符标识,第四个参数是对应where占位符的值ContentValues values = new ContentValues();values.put("name", person.getName());values.put("phone", person.getPhone());values.put("amount", person.getAmount());sqldb.update("person", values , "personid=?", new String[]{person.getId().toString()});sqldb.close();}/*** 通过ID查询记录* @param id* @return*/public Person find(Integer id){/*** getWritableDatabase 与 getReadableDatabase 的区别:* getReadableDatabase会先返回getWritableDatabase(可写),如果调⽤getWritableDatabase失败* 则才会调⽤getReadableDatabase后续⽅法,使数据库只读* 当写⼊的数据超过数据库⼤⼩则调⽤getWritableDatabase会失败* 所以只读时则可以使⽤此⽅法,其它情况(只要不是超过数据库⼤⼩)也可以使⽤此⽅法*/SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});//第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件Cursor cursor = sqldb.query("person", null, "personid=?", new String[]{id.toString()}, null, null, null);int personid;String name;String phone;int amount;Person person = null;if(cursor.moveToFirst()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);}cursor.close();return person;}/*** 返回指定长度记录,limit 3,5,适⽤于分页* @param offset 起始* @param maxResult 长度* @return*/public List<Person> getScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); //第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件//第⼋个参数是limit ?,? 条件Cursor cursor = sqldb.query("person", null, null, null, null, null, "personid",offset+","+maxResult); int personid;String name;String phone;int amount;Person person = null;List<Person> persons = new ArrayList<Person>();while(cursor.moveToNext()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);persons.add(person);}cursor.close();return persons;}/*** 返回总记录数* @return*/public long getCount(){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select count(*) from person", null);//第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件Cursor cursor = sqldb.query("person", new String[]{"count(*)"}, null, null, null, null, null);//该查询语句值返回⼀条语句cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}}⼗⼆、PersonServiceTest.java 单元测试类源码:package com.example.test;import java.util.List;import com.example.domain.Person;import com.example.service.DBOperateHelper;import com.example.service.PersonService;import android.test.AndroidTestCase;import android.util.Log;public class PersonServiceTest extends AndroidTestCase {public void testCreateDB() throws Exception{DBOperateHelper dbHelper = new DBOperateHelper(getContext());dbHelper.getWritableDatabase();}public void testSave() throws Exception{PersonService ps = new PersonService(getContext());for(int i=1;i<=100;i++){Person person = new Person();person.setName("我是"+i);person.setPhone(String.valueOf(Long.parseLong("188********")+i));ps.save(person);Log.i("PersonService",person.toString());}}public void testDelete() throws Exception{PersonService ps = new PersonService(getContext());ps.delete(10);}public void testUpdate() throws Exception{PersonService ps = new PersonService(getContext());ps.update(new Person(1,"xiaopang","188********",0));}public void testFind() throws Exception{PersonService ps = new PersonService(getContext());Person person = ps.find(1);Log.i("PersonService", person.toString());}public void testGetScrollData() throws Exception{PersonService ps = new PersonService(getContext());List<Person> persons = ps.getScrollData(3, 5);for(Person person:persons){Log.i("PersonService",person.toString());}}public void testGetCount() throws Exception{PersonService ps = new PersonService(getContext());Long count = ps.getCount();Log.i("PersonService",count.toString());}public void testUpdateAmount() throws Exception{PersonService ps = new PersonService(getContext());Person person1 = ps.find(1);Person person2 = ps.find(2);person1.setAmount(100);person2.setAmount(100);ps.update(person1);ps.update(person2);}public void testPayment() throws Exception{PersonService ps = new PersonService(getContext());ps.payment();}}⼗三、OtherPersonServiceTest 单元测试类源码:package com.example.test;import java.util.List;import com.example.domain.Person;import com.example.service.DBOperateHelper;import com.example.service.OtherPersonService;import android.test.AndroidTestCase;import android.util.Log;public class OtherPersonServiceTest extends AndroidTestCase {public void testCreateDB() throws Exception{DBOperateHelper dbHelper = new DBOperateHelper(getContext());dbHelper.getWritableDatabase();}public void testSave() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());for(int i=1;i<=100;i++){Person person = new Person();person.setName("我是"+i);person.setPhone(String.valueOf(Long.parseLong("188********")+i));ps.save(person);Log.i("PersonService",person.toString());}}public void testDelete() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());ps.delete(10);}public void testUpdate() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());ps.update(new Person(1,"xiaopang","188********",0));}public void testFind() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());Person person = ps.find(1);Log.i("PersonService", person.toString());}public void testGetScrollData() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());List<Person> persons = ps.getScrollData(3, 5);for(Person person:persons){Log.i("PersonService",person.toString());}}public void testGetCount() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());Long count = ps.getCount();Log.i("PersonService",count.toString());}}⼗四、注意事项以及相关知识点:1、掌握SQLite数据库如何创建数据库、建⽴表、维护字段等操作继承SQLiteOpenHelper类,构造函数调⽤⽗类构造函数创建数据库,利⽤onCreate创建表,利⽤onUpgrade更新表字段信息2、掌握SQLite数据库如何增、删、改、查以及分页取得SQLiteDatabase的实例,然后调⽤该实例的⽅法可以完成上述操作SQLiteDataBase提供两种操作上述功能的⽅式:⼀是直接调⽤execSQL书写sql语句,另⼀种是通过insert、update、delete、query等⽅法来传值来拼接sql,前⼀种适合熟练掌握sql 语句的3、对需要数据同步的处理请添加事务处理,熟悉事务的处理⽅式4、了解各个⽅法参数的意义以及传值5、掌握ListView显⽰后台数据的使⽤⽅法SimpleAdapter、SimpleCursorAdapter以及⾃定义适配器的使⽤,以及OnItemClickListener取值时各个适配器返回值的区别以及取值⽅法6、多学、多记、多练、多思,加油!更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Android程序设计有所帮助。

程序设计期末考试a卷.doc

程序设计期末考试a卷.doc

4、Activity销毁时执行执行方法是(D)A、onStart ()B、onResume ()C、onPause ()D、onDestroy()5、Android采用(A)的方式来管理Activity的实例A、任务栈B、任务堆C、队列D、任务列6、没有明确指定组件名的Intent称为(C)A、显示意图B、显式意图C、隐式意图D、隐示意图7、关于操作SQLite数据库,不正确的说法是(D ).A、类主要是用来创建数据库和更新数据库B、SQLiteDatabase类是用来操作数据库的C、在每次调用 SQLiteDatabase 的 getWritableDatabase ()方法时,会执行 SQLiteOpenHe1 per 的 onCreate 方法。

D、当数据库版本发生变化时,可以自动更新数据库结构 8、关于SimpleAdapter说法正确的是(C )..... ®....,tur 把驴* 成*2噤<救«014-2015-2Android程序设计期末考试A卷》试卷总分题号一二三四题分得分得分I一、单选题(每题2分,共计40分)1、下列不属于DDMS工具用途的是(C)A、查看进程的堆栈使用情况B、跟踪对象的内存分配C、操作仿真器或设备的文件系统D、查看所有安装的插件2、Android工程中(D)是混淆代码工具proguard的配置文件A> srcB、genC、resD、proguard-project, txt3、Android多语言支持加拿大需添加的目录是(A)。

A、values-en-rCAB、values-en-CAC、values-en-rHKD、values-en-HKB、Android中定义广播接收者的目的之一是方便我们开发者进行开发C、Android系统中内置了很多系统级别的广播D> Android中定义广播这个组件意义不是很大13、关于Service和Thread的区别说法,不正确的是().A> service默认运行在声明它的应用进程的主线程中。

AndroidSQLite数据库增删改查操作

AndroidSQLite数据库增删改查操作

AndroidSQLite数据库增删改查操作⼀、使⽤嵌⼊式关系型SQLite数据库存储数据在Android平台上,集成了⼀个嵌⼊式关系型数据库——SQLite,SQLite3⽀持NULL、INTEGER、REAL(浮点数字)、 TEXT(字符串⽂本)和BLOB(⼆进制对象)数据类型,虽然它⽀持的类型只有五种,但实际上sqlite3也接受varchar(n)、 char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。

SQLite最⼤的特点是你可以把各种类型的数据保存到任何字段中,⽽不⽤关⼼字段声明的数据类型是什么。

例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放⽇期型值。

但有⼀种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产⽣错误。

另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后⾯的数据类型信息,如下⾯语句你可以省略name字段的类型信息:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))SQLite可以解析⼤部分标准SQL语句,如:查询语句:select * from表名where条件⼦句 group by 分组字句 having ... order by 排序⼦句如:select * from personselect * from person order by id descselect name from person group by name having count(*)>1分页SQL与mysql类似,下⾯SQL语句获取5条记录,跳过前⾯3条记录select * from Account limit 5 offset 3或者select * from Account limit 3,5插⼊语句:insert into 表名(字段列表) values(值列表)。

安卓开发面试基础选择题(含答案)

安卓开发面试基础选择题(含答案)

单选题(每题1分,共计75分)1.在下列选项中,关于onActivityResult方法中的参数描述错误的是(d)p92A、requestCode,表示在启动Activity时传递的请求码B、resultCode,表示在返回数据时传入结果码C、data,表示携带返回数据的IntentD、data,表示启动Activity时传递的Intent2.Android相对布局中,要使A控件在B控件的下方,A控件需添加的属性是(c)A、android:layout_aboveB、android:layout_alignBaselineC、android:layout_belowD、android:layout_alignBottom3.下列选项中不能通过Intent传递的是(c)A、“数据”B、2C、对象objD、实现Serializable接口的对象obj4.在下列选项中,设置线性布局方向的属性是(a)A、orientation android:orientation=”horizontal/vertical”B、gravityC、layout_gravityD、padding5.在下列选项中,关于LogCat输出级别从高到低的是()xxxxxxxx 从低到高VDIWEA verbose debug info warning error assertA、Debug(D)、Verbose(V)、Warning(W)、Error(E)、Info(I)B、Verbose(V)、Debug(D)、Warning(W)、Error(E)、Info(I)C、Verbose(V)、Info(I)、Debug(D)、Warning(W)、Error(E)D、Warning(W)、Debug(D)、Verbose(V)、Error(E)、Info(I)6.在TableLayout中,stretchColumns属性表示(d)A、T ableLayout的列数B、T ableLayout的行数C、T ableLayout最多能加入的列数D、拉伸指定列填充满T ableLayout7.没有明确指定组件名的Intent称为(c)A、显示意图B、显式意图C、隐式意图D、隐示意图8.由于外部存储设备可能被移除、丢失或者处于其他状态,因此在使用外部设备之前必须使用(a)方法来确认外部设备是否可用。

增删改查操作或方法

增删改查操作或方法

增删改查操作或方法增加(Create)数据:1.使用INSERT语句插入新的记录到数据库表中。

2.调用API或库函数来创建一个新的对象,并将其保存到内存或数据库中。

3.使用图形界面或命令行工具,提供一个表单或交互式界面,以便用户输入新的数据。

删除(Delete)数据:1.使用DELETE语句从数据库表中删除特定的记录。

2.调用API或库函数来删除指定的对象。

3.提供一个删除功能的图形界面或命令行工具,以便用户选择并删除数据。

修改(Update)数据:1.使用UPDATE语句更新数据库表中的记录。

2.调用API或库函数更新指定的对象。

查询(Retrieve)数据:1.使用SELECT语句从数据库表中检索特定的记录。

2.调用API或库函数以检索指定的对象。

3.提供一个功能的图形界面或命令行工具,允许用户输入条件并返回相关的数据。

以下是一些常见的增删改查操作的代码示例(以关系型数据库为例):增加数据:```sqlINSERT INTO table_name (column1, column2, ...) VALUES(value1, value2, ...);```删除数据:```sqlDELETE FROM table_name WHERE condition;```修改数据:```sqlUPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;```查询数据:```sqlSELECT column1, column2, ... FROM table_name WHERE condition;```以下是一些常见的增删改查操作的代码示例(以编程语言为例):增加数据:```pythondef create_data(data):#调用数据库或API创建新数据pass```删除数据:```pythondef delete_data(id):#调用数据库或API删除指定数据pass```修改数据:```pythondef update_data(id, data):#调用数据库或API更新指定数据pass```查询数据:```pythondef retrieve_data(condition):#调用数据库或API查询满足条件的数据pass```根据实际需求,增删改查操作可以有许多变种。

Android中用SmartRefreshLayout实现ListView列表的数据刷新与。。。

Android中用SmartRefreshLayout实现ListView列表的数据刷新与。。。

Android中⽤SmartRefreshLayout实现ListView列表的数据刷新与。

这⾥⽤到的是第三⽅插件:SmartRefreshLayout效果图如下:使⽤步骤如下:1、添加远程依赖/*刷新和加载*/implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//没有使⽤特殊Header,可以不加这⾏2、如何在布局⽂件中使⽤,代码如下:(备注:SmartRefreshLayout分为三块:Header布局,Content布局,Footer布局。

其中,Content内容布局必须是⼀个整体。

例如,下⾯的布局包括图⽚,⽂字,列表等等,⽤⼀个ScrollView包起来。

)<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="/apk/res-auto"android:orientation="vertical"xmlns:android="/apk/res/android"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"android:background="@color/colorAccent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="标题栏"android:textSize="18dp"android:textStyle="bold"android:layout_centerInParent="true"/></RelativeLayout><yout.SmartRefreshLayoutandroid:id="@ id/Main_SRLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#444444"app:srlPrimaryColor="#444444"app:srlAccentColor="@android:color/white"app:srlEnablePreviewInEditMode="true"><yout.header.ClassicsHeaderandroid:layout_width="match_parent"android:layout_height="wrap_content"/><ScrollViewandroid:id="@ id/Main_scrollView"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:background="@color/colorWhite"><TextViewandroid:id="@ id/Main_tvRefreshInfo"android:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="gone"android:text="你好"/><ImageViewandroid:layout_width="match_parent"android:layout_height="150dp"android:scaleType="fitXY"android:src="@mipmap/corporation_detailinfo_topbg"/><com.deepreality.smartrefreshlayoutdemo.ListViewNestingandroid:id="@ id/Main_lvNewsList"android:layout_width="match_parent"android:layout_height="wrap_content"></com.deepreality.smartrefreshlayoutdemo.ListViewNesting> </LinearLayout></ScrollView><yout.footer.ClassicsFooterandroid:layout_width="match_parent"android:layout_height="wrap_content"app:srlAccentColor="@color/colorWhite"/></yout.SmartRefreshLayout></LinearLayout>3、布局⽂件知道怎么⽤了,下⾯说⼀下如何在Activity中使⽤,代码如下:其实分为以下⼏步即可:(1) 实现OnRefreshListener和OnLoadMoreListener接⼝⽅法。

智慧树知到《Android移动应用开发基础》章节测试答案

智慧树知到《Android移动应用开发基础》章节测试答案

智慧树知到《Android移动应用开发基础》章节测试答案第一章1、在下列选项中, 关于DDMS中Emulator Control功能的说法错误的是()。

A.模拟拨打电话B.模拟发送短信C.模拟发送经纬度信息D.模拟电话信号答案: 模拟电话信号2、在创建Android工程时,填写的Theme是()。

A.应用名称B.程序UI使用的主题C.项目的包名D.项目名称答案: 程序UI使用的主题3、Android是Google公司基于Linux平台开发的手机及平板电脑操作系统。

A.对B.错答案: 对4、Dalvik虚拟机是在linux操作系统上运行。

A.对B.错答案: 对5、随着智能手机种类增多,屏幕分辨率千变万化,使用绝对布局需要精确的计算控件大小,同时还要考虑手机屏幕尺寸和分辨率,在开发中这是非常低效的,因此不推荐使用。

A.对B.错答案: 对6、Android UI开发中,相对布局通常有两种形式,一种是相对于容器而言的,一种是相对于控件而言的。

A.对B.错答案: 对7、理论上绝对布局可以完成任何的布局设计,且灵活性很大,所以开发中推荐使用绝对布局。

A.对B.错答案: 错8、TableLayout可以将视图按照行、列进行排列。

A.对B.错答案: 对9、RadioGroup是单选组合框,可容纳多个RadioButton,并把它们组合在一起,实现单选状态。

A.对B.错答案: 对10、下列属于DDMS工具用途的是()。

A.查看进程的堆栈使用情况B.跟踪对象的内存分配C.操作仿真器或设备的文件系统D.查看所有安装的插件答案: 查看进程的堆栈使用情况,跟踪对象的内存分配,操作仿真器或设备的文件系统第二章1、所有的用户界面元素都是由____和ViewGroup对象构成的。

A.TextViewB.ButtonC.ViewD.RadioButton答案: View2、____都是看不见的,它主要用于向我们提供各种各样的布局模式。

AndroidRecyclerview实现多选,单选,全选,反选,批量删除的功能

AndroidRecyclerview实现多选,单选,全选,反选,批量删除的功能

AndroidRecyclerview实现多选,单选,全选,反选,批量删除的功能效果图如下:Recyclerview 实现多选,单选,全选,反选,批量删除的步骤1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件2.这⾥选中的控件没有⽤checkbox来做,⽤的是imageview,选中和不选中其实是两张图⽚3.默认是不显⽰选中的控件的,点击编辑的时候显⽰,点击取消的时候隐藏4.通过adapter和activity数据之间的传递,然后进⾏具体的操作具体代码如下:在recyclerview的布局中写全选,反选,删除,计数等相应的控件<LinearLayoutandroid:id="@+id/ll_mycollection_bottom_dialog"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="bottom"android:visibility="gone"android:background="@color/app_bg"><Viewandroid:background="#e5e5e5"android:layout_width="match_parent"android:layout_height="1px"/><RelativeLayoutandroid:background="@color/white"android:layout_width="match_parent"android:layout_height="@dimen/px_90"><TextViewandroid:layout_centerVertical="true"android:id="@+id/tv"android:textColor="#1A1A1A"android:textSize="@dimen/px_28"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/px_30"android:text="@string/mine_certify_select" /><TextViewandroid:layout_centerVertical="true"android:layout_toRightOf="@+id/tv"android:textColor="#1A1A1A"android:textSize="@dimen/px_28"android:id="@+id/tv_select_num"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/px_18"android:text="0" /><Buttonandroid:textColor="@color/color_b7b8bd"android:textSize="@dimen/px_28"android:layout_centerVertical="true"android:background="@drawable/button__noclickable_shape"android:gravity="center"android:id="@+id/btn_delete"android:layout_width="@dimen/px_160"android:layout_height="@dimen/px_66"android:layout_marginRight="@dimen/px_30"android:layout_alignParentRight="true"android:text="删除" /><TextViewandroid:layout_centerVertical="true"android:id="@+id/select_all"android:layout_marginRight="@dimen/px_30"android:background="@drawable/bg_selete_all"android:layout_toLeftOf="@+id/btn_delete"android:layout_width="@dimen/px_160"android:layout_height="@dimen/px_66"android:text="全选"android:gravity="center"android:textColor="#000001"android:textSize="@dimen/px_28"/></RelativeLayout></LinearLayout>Adapter中的布局就不必再写了,就⼀个item,最左边⼀个imageview.<ImageViewandroid:id="@+id/check_box"android:src="@mipmap/ic_uncheck"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="@dimen/px_24"android:gravity="center"android:visibility="gone"/>布局写完开始写逻辑代码⾸先在adapter定义⼀个⽅法,以便在activity中拿到数据添加进adapter中 public void notifyAdapter(List<MyLiveList.MyLive> myLiveList,boolean isAdd){if (!isAdd){this.mMyLiveList=myLiveList;}else {this.mMyLiveList.addAll(myLiveList);}notifyDataSetChanged();}然后在activity中拿到获取到数据后调⽤adapter中的这个⽅法,添加数据mAdapter.notifyAdapter(data.getList(), false);在adapter中在判空,更有保证public List<MyLiveList.MyLive> getMyLiveList(){if (mMyLiveList == null) {mMyLiveList =new ArrayList<>();}return mMyLiveList;}然后adapter中的getItemCount就直接拿到上⾯这个mMyLiveList的⼤⼩就可以了接下来开始点击编辑的时候显⽰出imageview和recycleview中的底部全选反选部分定义两个变量private static final int MYLIVE_MODE_CHECK = 0;private static final int MYLIVE_MODE_EDIT = 1;//点击编辑的时候显⽰,顺便调mAdapter.setEditMode(mEditMode);赋值mEditMode = mEditMode == MYLIVE_MODE_CHECK ? MYLIVE_MODE_EDIT : MYLIVE_MODE_CHECK; if (mEditMode == MYLIVE_MODE_EDIT) {activity_btn.setText("取消");ll_mycollection_bottom_dialog.setVisibility(View.VISIBLE);editorStatus = true;} else {activity_btn.setText("编辑");ll_mycollection_bottom_dialog.setVisibility(View.GONE);editorStatus = false;onRefresh();}mAdapter.setEditMode(mEditMode);//当然,adapter中也有先关的变量在记录private static final int MYLIVE_MODE_CHECK = 0;int mEditMode = MYLIVE_MODE_CHECK;public void setEditMode(int editMode) {mEditMode = editMode;notifyDataSetChanged();}//在onBindViewHolder中做显⽰和隐藏的操作.holder.setIsRecyclable(false); // 为了条⽬不复⽤//显⽰和隐藏if (mEditMode == MYLIVE_MODE_CHECK) {holder.mCheckBox.setVisibility(View.GONE);} else {holder.mCheckBox.setVisibility(View.VISIBLE);为了⽅便记录选中的状态,在bean⾥⾯⽤个变量记起来public boolean isSelect;public boolean isSelect() {return isSelect;}public void setSelect(boolean isSelect) {this.isSelect = isSelect;}//然后点击条⽬选中和不选中的时候为Imageview设置不同的图⽚if(myLive.isSelect()) {holder.mCheckBox.setImageResource(R.mipmap.ic_checked);}else{holder.mCheckBox.setImageResource(R.mipmap.ic_uncheck);}//在adapter中暴漏⼀个Item的点击事件的接⼝public interface OnSwipeListener {void onItemClickListener(int pos,List<MyLiveList.MyLive> myLiveList);}/*在activity中的item点击事件中,来操作Imageview是否选中*///⽤⼀个变量记录private int index = 0;MyLive myLive = myLiveList.get(pos);boolean isSelect = myLive.isSelect();if (!isSelect) {index++;myLive.setSelect(true);if (index == myLiveList.size()) {isSelectAll = true;selectAll.setText("取消全选");}} else {myLive.setSelect(false);index--;isSelectAll = false;selectAll.setText("全选");}setBtnBackground(index);tv_select_num.setText(String.valueOf(index));radioAdapter.notifyDataSetChanged();/*** 根据选择的数量是否为0来判断按钮的是否可点击.** @param size*/private void setBtnBackground(int size) {if (size != 0) {mBtnDelete.setBackgroundResource(R.drawable.button_shape);mBtnDelete.setEnabled(true);mBtnDelete.setTextColor(Color.WHITE);} else {mBtnDelete.setBackgroundResource(R.drawable.button__noclickable_shape);mBtnDelete.setEnabled(false);mBtnDelete.setTextColor(ContextCompat.getColor(this, R.color.color_b7b8bd));}}⾄于全选和反选的操作,就是遍历这个bean类,得到他的选择状态,重新设置就可以了.if (radioAdapter == null) return;if (!isSelectAll) {for (int i = 0, j = radioAdapter.getMyLiveList().size(); i < j; i++) {radioAdapter.getMyLiveList().get(i).setSelect(true);}index = radioAdapter.getMyLiveList().size();mBtnDelete.setEnabled(true);selectAll.setText("取消全选");isSelectAll = true;} else {for (int i = 0, j = radioAdapter.getMyLiveList().size(); i < j; i++) {radioAdapter.getMyLiveList().get(i).setSelect(false);}index = 0;mBtnDelete.setEnabled(false);selectAll.setText("全选");isSelectAll = false;}radioAdapter.notifyDataSetChanged();setBtnBackground(index);tv_select_num.setText(String.valueOf(index));最后删除的话就调删除的接⼝,遍历这个bean,判断当前的状态如果是选中的状态,就删除! 这样就OK了以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

Android期末复习题

Android期末复习题

Android期末复习题第1章 Android基础⼊门习题⼀、填空题2. Android底层是基于【Linux 】操作系统的。

3. Android系统采⽤分层架构,由⾼到低分别为应⽤程序层、应⽤程序框架层、【核⼼类库】、【Linux内核】。

5. Android⼯程中src⽬录下存放【Java】⽂件。

⼆、判断题1. Android是Google公司基于Linux平台开发的⼿机及平板电脑操作系统。

√4. 在创建Android⼯程时,填写的Package Name表⽰⼯程的名称。

×5. Android ⼯程中AndroidManifest.xml⽂件是整个程序的配置⽂件。

√三、选择题4. 下列关于Android起源的说法中,错误的是( A )。

A.Android1.5被称为甜甜圈B.Android是第⼀个真正为⼿机打造的开放性系统C.Android本意指“机器⼈”D.Android最初由Andy Rubin开发的5. 下列选项中不属于Android体系结构的是( D )。

A.应⽤程序层B.应⽤程序框架层C.核⼼类库D.WindowManager;四、简答题1. 请简要说明Android程序结构中AndroidManifest.xml的功能?该⽂件是整个项⽬的配置⽂件,在程序中定义的四⼤组件都需要在这个⽂件⾥注册,另外还可以在这个⽂件中给应⽤程序添加权限声明,也可以重新指定创建项⽬时程序最低兼容的版本和最⾼版本。

在清单⽂件配置的信息会配置到Android系统中,当程序运⾏时,系统会先找到清单⽂件中配置的信息然后根据设置的信息打开相应的组件。

第2章 Android UI开发习题⼀、填空题1. ⽹格布局使⽤的标签是【GridLayout 】。

3. 在Android系统中,线性布局使⽤【 LinearLayout 】控件表⽰。

5. 在【EditText】控件中可以输⼊⽂字,并且可以通过inputType属性控制输⼊的内容只能是数字或者字母等。

android listview用法

android listview用法

android listview用法ListView的用法如下:1.在布局文件中声明ListView控件:```某ml<ListView/>```2.在Activity或Fragment中获取ListView实例:```javaListView listView = findViewById(R.id.listview);```3.创建数据源,可以是数组、List或数据库查询结果等:```javaString[] data = {"item1", "item2", "item3"};```4.创建适配器(Adapter),将数据源与ListView关联起来:```javaArrayAdapter<String> adapter = new ArrayAdapter<>(this, yout.simple_list_item_1, data);```5.将适配器设置给ListView:```javalistView.setAdapter(adapter);```6.为ListView设置点击事件监听器:```javalistView.setOnItemClickListener(newAdapterView.OnItemClickListenepublic void onItemClick(AdapterView<?> parent, View view, int position, long id)//处理点击事件}});```以上就是ListView的基本用法。

除了基本的用法,ListView还有以下常用属性和方法:1.添加头部或底部视图:```javaView headerView =LayoutInflater.from(this).inflate(yout.list_header, listView, false);listView.addHeaderView(headerView);View footerView =LayoutInflater.from(this).inflate(yout.list_footer, listView, false);listView.addFooterView(footerView);```2.设置空视图,当数据源为空时显示的视图:```javaView emptyView = findViewById(R.id.empty_view);listView.setEmptyView(emptyView);```3.滚动到指定位置:```javalistView.setSelection(position);```4.滚动到顶部或底部:```javalistView.setSelection(0); // 滚动到顶部listView.setSelection(adapter.getCount( - 1); // 滚动到底部```5.滑动监听器,用于监听ListView的滑动事件:```javalistView.setOnScrollListener(new AbsListView.OnScrollListene public void onScrollStateChanged(AbsListView view, int scrollState)//滑动状态改变时回调}public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 。

listview清空数据的方法

listview清空数据的方法

listview清空数据的方法以listview清空数据的方法为标题,写一篇文章:在移动应用开发中,ListView是一个常用的控件,用于展示列表数据。

有时候我们需要清空ListView中的数据,本文将介绍几种常用的方法来实现这个功能。

一、使用Adapter的clear方法ListView的数据通常由一个Adapter来提供,我们可以通过调用Adapter的clear方法来清空数据。

该方法会将Adapter中的数据全部清空,并通知ListView更新UI。

具体步骤如下:1. 获取ListView的Adapter对象,例如:Adapter adapter = listView.getAdapter();2. 调用Adapter的clear方法,例如:adapter.clear();3. 调用Adapter的notifyDataSetChanged方法,例如:adapter.notifyDataSetChanged();这种方法的优点是简单直接,适用于数据量不大的情况。

但是需要注意的是,该方法只能清空Adapter中的数据,并不能清空ListView的显示内容。

如果需要清空ListView的显示内容,还需要进行其他操作。

二、使用Adapter的removeAll方法除了调用Adapter的clear方法,我们还可以调用Adapter的removeAll方法来清空数据。

该方法会将Adapter中的所有数据移除,并通知ListView更新UI。

具体步骤如下:1. 获取ListView的Adapter对象,例如:Adapter adapter = listView.getAdapter();2. 调用Adapter的removeAll方法,例如:adapter.removeAll();3. 调用Adapter的notifyDataSetChanged方法,例如:adapter.notifyDataSetChanged();这种方法与第一种方法相似,适用于数据量不大的情况。

listview notifydatasetchanged

listview notifydatasetchanged

listview notifydatasetchanged摘要:1.ListView 概述2.ListView 的notifyDataSetChanged 方法介绍3.notifyDataSetChanged 方法的原理4.使用示例5.总结正文:ListView 是一个常用的列表视图控件,广泛应用于Android 和Java 等开发平台中。

它可以让用户在界面上查看大量数据,并且可以方便地对其进行增删改查等操作。

在ListView 的使用过程中,数据的更新和重绘是非常重要的。

notifyDataSetChanged 方法就是ListView 中用于通知数据发生变化并自动重绘的关键方法。

otifyDataSetChanged 方法是ListView 的内部类BaseAdapter 中定义的一个方法。

当ListView 的数据发生变化时,我们需要调用此方法来通知ListView 进行数据的重绘。

此方法的原理是通过刷新ListView 的视图,从而达到更新界面的目的。

下面是一个简单的使用示例:```java// 假设我们有一个ListView 的适配器类class MyAdapter extends BaseAdapter {private List<String> data;public MyAdapter(List<String> data) {this.data = data;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// 这里可以自定义列表项的视图TextView textView = (TextView) convertView;textView.setT ext(data.get(position));return textView;}// 当数据发生变化时,调用此方法通知ListView 进行数据的重绘public void notifyDataSetChanged() {super.notifyDataSetChanged();}}```在实际使用过程中,我们通常会通过notifyDataSetChanged 方法来更新ListView 中的数据。

java集合arraylist的增删改查主要方法

java集合arraylist的增删改查主要方法

java集合arraylist的增删改查主要方法
Java中的ArrayList是一个动态数组,提供了很多方法来进行增删改查操作。

以下是ArrayList的主要方法:
增加元素:
add(E e): 在列表的末尾添加指定的元素。

add(int index, E element): 在指定的位置插入指定的元素。

删除元素:
remove(): 删除列表中的最后一个元素。

remove(Object o): 删除列表中第一个匹配的元素。

remove(int index): 删除指定位置的元素。

修改元素:
set(int index, E element): 将指定位置的元素设置为指定的值。

查找元素:
get(int index): 返回指定位置的元素。

contains(Object o): 如果列表包含指定的元素,则返回true。

indexOf(Object o): 返回列表中第一次出现指定元素的索引,如果列表不包含该元素,则返回-1。

lastIndexOf(Object o): 返回列表中最后一次出现指定元素的索引,如果列表不包含该元素,则返回-1。

其他常用方法:
isEmpty(): 如果列表为空,则返回true。

size(): 返回列表中的元素数量。

iterator(): 返回一个迭代器,用于遍历列表中的元素。

toArray(): 将列表转换为数组。

trimToSize(): 缩减容量以匹配当前大小。

这些方法提供了基本的增删改查操作,可以根据实际需求选择使用合适的方法。

ListView“表格编写”与“增,删,改”功能解析。

ListView“表格编写”与“增,删,改”功能解析。

ListView“表格编写”与“增,删,改”功能解析。

DataGridView控件功能十分强大,显示表格也方便,但性能就没有那么高;ListView控件功能没那么强大,显示表格也要多写代码,但性能相对高一些。

以下我总结出一系列对于ListView表格的详细代码解析:1.首先我们需要先创建一个ListView表格必备的属性设定。

this.ListView.GridLines = true; //显示表格线this.ListView.View = View.Details;//表格在窗体显示细节的格式,如果做成表格,这个视图必须选择Detailsthis.ListView.Scrollable = true;//滚动条this.ListView.HeaderStyle = ColumnHeaderStyle.Clickable//表头样式this.ListView.FullRowSelect = true;//表示在控件上,是否可以选择一整行基本以上属性更改后,形成一个基本完整的表格控件。

在针对自己不同的需求可以在设置以下不同功能的属性。

belEdit = true;//是否可编辑,ListView只可编辑第一列。

this.ListView.MultiSelect = true;//是否可以选择多个项。

this.ListView.HotTracking = true;/*当鼠标指针经过某个项或者子项的文本时,文本的外观是否变成超链接形式。

当选择此属性时则**HoverSelection**自动为true和**Activation**属性为oneClick*/this.ListView.HoverSelection = true;//该鼠标指针在该项停留几秒后自动选中。

this.ListView.Activation = ItemActivation.Standard;//激活某一项时,必须执行的操作是(如:双击项或者单击项)2.基本的表格属性设置完成后,首先要创建表头,即使每一列的列标题名称。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图-1 android 实现对listview数据的增删改查主要界面本例只有一个UpdateListViewActivity类,相关的操作以及功能均在一个界面完成。

对listview 数据的增删改查,实质就是对填充的数组(填充的数据)进行重新修改后,再次调用notifyDataSetChanged()方法进行更新。

尽管如此,对数据使用起来还是比较生疏,下面的例子能加强对listview数据更新的理解。

UpdateListViewActivity.java类是程序的唯一的一个类,实现了对listview增删改查的操作,代码比较多,但理解并不比较复杂。

1.UpdateListViewActivity.java1.package com.updatelistview.main;2.3.import java.util.ArrayList;4.import java.util.HashMap;5.6.import android.app.Activity;7.import android.app.AlertDialog;8.import android.content.Context;9.import android.content.DialogInterface;10.import android.os.Bundle;11.import youtInflater;12.import android.view.View;13.import android.view.View.OnClickListener;14.import android.widget.Button;15.import android.widget.EditText;16.import android.widget.LinearLayout;17.import android.widget.ListView;18.import android.widget.SimpleAdapter;19.import android.widget.Toast;20.21.public class UpdateListViewActivity extends Activity {22.// 控件23.private Button addBtn;24.private Button deleteBtn;25.private Button editBtn;26.private Button queryBtn;27.private ListView listview;28.// 数组29.private SimpleAdapter listItemAdapter;30.private ArrayList<HASHMAP<STRING, Object>> listItem = null;31.32./** Called when the activity is first created. */33.@Override34.public void onCreate(Bundle savedInstanceState) {35.super.onCreate(savedInstanceState);36. setContentView(yout.main);37.38.// 获取控件39. addBtn = (Button) findViewById(R.id.add_id);40. deleteBtn = (Button) findViewById(R.id.delete_id);41. editBtn = (Button) findViewById(R.id.edit_id);42. queryBtn = (Button) findViewById(R.id.query_id);43. listview = (ListView) findViewById(R.id.show_result);44.45.// 初始化数据46. init();47.48.// 设置控件事件监听49. addBtn.setOnClickListener(addClick);50. deleteBtn.setOnClickListener(deleteClick);51. editBtn.setOnClickListener(editClick);52. queryBtn.setOnClickListener(queryClick);53.54. }55.56.// 添加事件响应57. OnClickListener addClick = new OnClickListener() {58.59.@Override60.public void onClick(View v) {61.// TODO Auto-generated method stub62.63.// 加载输入框的布局文件64. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this65. .getSystemService(YOUT_INFLATER_SERVICE);66.final LinearLayout layout = (LinearLayout) inflater.inflate(67. yout.input_add, null);68.69.// 弹出的对话框70.71.new AlertDialog.Builder(UpdateListViewActivity.this)72./* 弹出窗口的最上头文字 */73. .setTitle("添加一条数据")74./* 设置弹出窗口的图式 */75. .setIcon(android.R.drawable.ic_dialog_info)76./* 设置弹出窗口的信息 */77. .setMessage("请输入添加的内容")78. .setView(layout)79. .setPositiveButton("确定",80.new DialogInterface.OnClickListener() {81.public void onClick(82. DialogInterface dialoginterface, int i) {83.84. EditText inputStringr = (EditText) layout85. .findViewById(R.id.input_add_string);86.87. String str = inputStringr.getText()88. .toString();89.90.if (str == null || str.equals("")) {91.92. Toast.makeText(getApplicationContext(),93."添加的内容不能为空", Toast.LENGTH_SHORT)94. .show();95. } else {96. HashMap<STRING, Object> map = new HashMap<STRING, Object>();97. map.put("viewspot", str);98. map.put("add", R.drawable.right);99. listItem.add(0, map);100.// 如果在前面添加一条数据添加101.// listItem.add(map);102. listItemAdapter.notifyDataSetChanged();103. Toast.makeText(104. UpdateListViewActivity.this,105."添加的一条数据为:" + str + "",106. Toast.LENGTH_SHORT).show();107.108. }109.110. }111. })112. .setNegativeButton("取消",113.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */114.public void onClick(115. DialogInterface dialoginterface, int i) {116. Toast.makeText(UpdateListViewActivity.this, 117."取消了删除数据", Toast.LENGTH_SHORT) 118. .show();119.120. }121. }).show();122.123. }124. };125.126.// 删除事件响应127. OnClickListener deleteClick = new OnClickListener() {128.129.@Override130.public void onClick(View v) {131.// TODO Auto-generated method stub132.133./**134. * listItem.clear();清空所有数据135. *136. * */137.138./*139. * listItem.clear();140. * listItemAdapter.notifyDataSetChanged();141. */142.143.// 加载输入框的布局文件144. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this 145. .getSystemService(YOUT_INFLATER_SERVICE); 146.final LinearLayout layout = (LinearLayout) inflater.inflate(147. yout.input_delete, null);148.149.// 弹出的对话框150.151.new AlertDialog.Builder(UpdateListViewActivity.this)152./* 弹出窗口的最上头文字 */153. .setTitle("删除一条数据")154./* 设置弹出窗口的图式 */155. .setIcon(android.R.drawable.ic_dialog_info)156./* 设置弹出窗口的信息 */157. .setMessage("请输入删除的索引")158. .setView(layout)159. .setPositiveButton("确定",160.new DialogInterface.OnClickListener() {161.public void onClick(162. DialogInterface dialoginterface, int i) {163.164. EditText inputNumber = (EditText) layout165. .findViewById(R.id.input_delete_number); 166.167. String str = inputNumber.getText()168. .toString();169.170.if (str == null || str.equals("")) {171.172. Toast.makeText(getApplicationContext(), 173."请输入一个数字", Toast.LENGTH_SHORT) 174. .show();175. } else {176.int number = Integer.valueOf(str);177.178.int size = listItem.size();179.180.// 判断数字是否超出数组索引范围181.if (number >= size) {182. Toast.makeText(183. getApplicationContext(),184."没有找到删除的数据索引",185. Toast.LENGTH_SHORT).show();186.187. } else {188.189. String value = listItem.get(number)190. .toString();191. listItem.remove(number);192. listItemAdapter193. .notifyDataSetChanged();194. Toast.makeText(195. UpdateListViewActivity.this,196."删除的数据为:" + value + "",197. Toast.LENGTH_SHORT).show();198.199. }200. }201.202. }203. })204. .setNegativeButton("取消",205.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */206.public void onClick(207. DialogInterface dialoginterface, int i) {208. Toast.makeText(UpdateListViewActivity.this, 209."取消了删除数据", Toast.LENGTH_SHORT) 210. .show();211.212. }213. }).show();214.215. }216. };217.// 修改事件响应218. OnClickListener editClick = new OnClickListener() {219.220.@Override221.public void onClick(View v) {222.// TODO Auto-generated method stub223.// 加载输入框的布局文件224. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this 225. .getSystemService(YOUT_INFLATER_SERVICE); 226.final LinearLayout layout = (LinearLayout) inflater.inflate(227. yout.input_edit, null);228.229.// 弹出的对话框230.231.new AlertDialog.Builder(UpdateListViewActivity.this)232./* 弹出窗口的最上头文字 */233. .setTitle("修改一条数据")234./* 设置弹出窗口的图式 */235. .setIcon(android.R.drawable.ic_dialog_info)236./* 设置弹出窗口的信息 */237. .setMessage("请输入修改的索引及内容")238. .setView(layout)239. .setPositiveButton("确定",240.new DialogInterface.OnClickListener() {241.public void onClick(242. DialogInterface dialoginterface, int i) {243.244. EditText inputEditNumber = (EditText) layout 245. .findViewById(R.id.input_edit_number); 246.247. String numberStr = inputEditNumber248. .getText().toString();249.250. EditText inputEditString = (EditText) layout 251. .findViewById(R.id.input_edit_string); 252.253. String editStr = inputEditString.getText()254. .toString();255.256.if (numberStr == null257. || numberStr.equals("")) {258.259. Toast.makeText(getApplicationContext(), 260."请输入要修改的索引", Toast.LENGTH_SHORT)261. .show();262. } else {263.int number = Integer.valueOf(numberStr); 264.265.int size = listItem.size();266.267.// 判断数字是否超出数组索引范围268.if (number >= size) {269. Toast.makeText(270. getApplicationContext(),271."没有找到修改的数据索引",272. Toast.LENGTH_SHORT).show();273.274. } else {275.276. HashMap<STRING, Object> map = new HashM ap<STRING, Object>();277. map.put("viewspot", editStr);278. map.put("add", R.drawable.right);279.280. listItem.set(number, map);281. listItemAdapter282. .notifyDataSetChanged();283.284. Toast.makeText(285. UpdateListViewActivity.this,286."数据修改为:" + editStr + "",287. Toast.LENGTH_SHORT).show();288.289. }290. }291.292. }293. })294. .setNegativeButton("取消",295.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */296.public void onClick(297. DialogInterface dialoginterface, int i) {298. Toast.makeText(UpdateListViewActivity.this, 299."取消了修改数据", Toast.LENGTH_SHORT) 300. .show();301.302. }303. }).show();304.305. }306. };307.308.// 查询事件响应309. OnClickListener queryClick = new OnClickListener() {310.311.@Override312.public void onClick(View v) {313.// TODO Auto-generated method stub314.// 查询数据315. listItemAdapter.notifyDataSetChanged();316. }317. };318.319.// 初始化数据320.private void init() {321.322. listItem = new ArrayList<HASHMAP<STRING, Object>>();323.for (int i = 0; i < 12; i++) {324. HashMap<STRING, Object> map = new HashMap<STRING, Object>() ;325. map.put("viewspot", "北京故宫,颐和园" + i);326. map.put("add", R.drawable.right);327. listItem.add(map);328. }329. listItemAdapter = new SimpleAdapter(getApplicationContext(), listItem,// 数据源330. yout.items, new String[] { "viewspot", "add" }, new int[] { 331. R.id.viewspot, R.id.add });332. listview.setAdapter(listItemAdapter);333.334. } 335. 336.}。

相关文档
最新文档