基础学习总结(五)---baseAdapter、ContentProvider
小写转大写 : ctrl+shift+F
<ScrollView></ScrollView>滚动条显示视图
ListView与BaseAdapter:
public class MainActivity extends Activity {
private List<Person> pList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ListView mlistview=(ListView)findViewById(R.id.listview);
//把view与适配器关联
mlistview.setAdapter(new MyAdapter());
} class MyAdapter extends BaseAdapter{ //获取view数据的长度
@Override
public int getCount() {
return pList.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} //获得ListView中的某一行的view对象
//postion返回当前索引的位置
//convertView 缓存对象
//parent是listView对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv=null;
if(convertView!=null){//判断缓存对象是否为空
tv=(TextView)convertView;
}else{//等于null程序刚加载,则创建
tv=new TextView(MainActivity.this);//类名.this ==上下文
}
Person p=pList.get(position);//获得指定位置的数据,进行对TextView绑定
tv.setText(p.toString());
return tv; } public View getView2(int position, View convertView, ViewGroup parent){
View view=null; if(convertView==null){
//布局填充器对象,用于把xml布局转换成view对象
LayoutInflater inflator= MainActivity2.this.getLayoutInflater();
view=inflator.inflate(R.layout.listview2_item, null);
}else{
view=convertView;
} //赋值
//。。。
return view;
}
}
}
ArrayAdapter与simpleAdapter:
public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ListView mlistview=(ListView)findViewById(R.id.list_view); // ArrayAdapter适配器实例
String[] textArr={"a","b","c","d","e","f","g","h","i","t","z"};
//定义数据适配器
//用于显示简单的文本内容
//android.R.layout.simple_list_item_1 listview的子条目显示布局的id
//textArr 显示在list列表中的数据
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,textArr);
mlistview.setAdapter(adapter); //context 上下文
//data List<Map<String,Object>> data
//resource listview子条目布局的id
//from data数据中的map集合里的key
//to resource中的id
//SimpleAdapter adp=new SimpleAdapter(context,data,resource,from,to);
List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();
Map<String,Object> map=new HashMap<String,Object>();
map.put("name", "zhangsan1");
map.put("age", "17");
SimpleAdapter adp=new SimpleAdapter(this,data,R.layout.listview_item,
new String[]{"name","age"},new int[]{R.id.tv_name,R.id.tv_ico});
mlistview.setAdapter(adp);
} }
ContentProvider:内容提供者抽象类
因为在Android系统里面,数据库是私有的。一般情况下外部应用程序是没有权限读取其它应用程序的数据。如果想公开你自己的数据,有两个选择:可以创建你自己的内容提供器(一个ContentProvider子类)或者你可以给已有的提供器添加数据-如果存在一个控制同样类型数据的内容提供器且你拥有写的权限。而外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。
实现ContentProvider抽象类需要在配置文件中声明:
//并赋读写权限
<provider android:name=".provider.PersonContentProvider"
android:authorities="包名+类名" android:readPermission="随便.read"
android:writePermission="随便2.write" >
</provider>
声明权限还需要在manifest节点下添加:
<manifest>
<permission android:name="随便.read"></permission>
<permission android:name="随便2.write"></permission>
</manifest>
并在对应访问的工程的Manifest.xml中注册(不然无法访问被拒绝):
<uses permission android:name="随便.read" />
<uses permission android:name="随便2.write" />
public class PersonContentProvider extends ContentProvider{
private static final String AUTHORITY="包名+类名";
private static final int PERSON_INSERT_CODE=0; //操作person表添加的操作uri匹配码
private Static final int PERSON_DELETE_CODE=1;
private Static final int PERSON_UPDATE_CODE=2;
private Static final int PERSON_QUERYALL_CODE=3;
private static UriMatcher uriMatcher; //Person表的数据库帮助对象
private PersonSQLiteOpenHelper mOpenHelper; static{
uriMatcher =new uriMatcher(UriMatcher.NO_MATH); //添加一些uri(分机号)
//content://包名+类名/person/insert
uriMatcher.addURI(AUTHORITY,"person/insert",PEROSON_INSERT_CODE);
uriMatcher.addURI(AUTHORITY,"person/delete",PERSON_DELETE_CODE);
uriMatcher.addURI(AUTHORITY,"person/update",PERSON_UPDATE_CODE);
uriMatcher.addURI(AUTHORITY,"person/queryall",PERSON_QUERYALL_CODE);
}
@override
public boolean onCreate(){
mOpenHelper=new PersonSQLiteOpenHelper(getContext());
} @override
public String getType(Uri uri){ } @override
public Uri insert(Uri uri,ContentValues values){
switch(uriMatcher.match(uri)){
case PEROSON_INSERT_CODE:
SQLiteDatabase db= mOpenHelper.getWriteableDatabase();
if(db.isopen()){
long id = db.insert("person",null,values);
db.close();
return contentUris.withAppendedId(uri,id);
}
break; default:
throw new IllegalArgumentException("uri不匹配":+uri);
}
return null;
} @override
public int delete(Uri uri,String selection,String[] selectionArgs){
//..
} @override
public int update(Uri uri,ConentValues values,String selection,String[] selectionArgs){
//...
} @override
public Curos query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder){
Switch(uriMatcher.match(uri)){
case PERSON_QUERYALL_CODE:
SQLiteDatabase db=mOpenHelper.getReadableDatabase();
if(db.isopen()){
Cusor cor=db.query("person",projection,selection,selectionArgs,null,null,sortOrder);
return cor;
//db.close();返回cusor结果集时不可以关闭数据库
}
break;
default:
throw new IllegalArgumentException("uri不匹配:"+uri);
}
} } public class PersonContentResolver{
public void PersonInsert(){
Uri uri=Uri.Parser.("content://包名+类名/person/Insert"); //内容提供者对象
ContentResolver resolver = getContext().getContentResolver();
ContentValues values=new ContentValues();
value.put("name","小风");
value.put("age","19"); uri=resolver.insert(uri,values);
long id=ContentUris.parseId(uri);
log.i(tag,id);
} }
基础学习总结(五)---baseAdapter、ContentProvider的更多相关文章
- C++基础 学习笔记五:重载之运算符重载
C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)
此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- Java基础学习笔记(五) - 常用的API
API介绍 概念:API 即应用编程程序接口.Java API是JDK中提供给我们使用的类说明文档,这些类将底层的代码实现封装.无需关心这些类是如何实现,只需要学习如何使用. 使用:通过API找到需要 ...
- python 的基础 学习 第五天 基础数据类型的操作方法
1,列表的基本操作方法 1,列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: ...
- salesforce 零基础学习(五十八)通过sObject的field返回其对应的基础类型
项目中有时候会要求通过sObject的Field的type类型返回其对应的基本类型,然后对其进行相关的处理,创建sObject的field可以选择的type类型是固定多的. 上述类型可以转换成几种基本 ...
- salesforce 零基础学习(五十三)多个文件生成一个zip文件(使用git上封装的代码)
此篇参考git代码:https://github.com/pdalcol/Zippex 学习salesforce可以访问一个朋友的网站:https://www.xgeek.net 首先感谢git上提供 ...
- javascript基础学习(五)
javascript之函数 学习要点: 函数的介绍 函数的参数 函数的属性和方法 系统函数 一.函数的介绍 1.函数就是一段javascript代码.可以分为用户自定义函数和系统函数. 如果一个函 ...
- Java基础学习笔记五 Java基础语法之面向对象
面向对象 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式.面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...
随机推荐
- WinServer 之 访问同网段服务器 或 同一服务器多虚拟机间的访问
今天在发布网站时遇到不能访问同网段数据库服务器.具体情况为:web服务端部署在192.168.10.1下,而数据库服务端部署在192.168.10.2下,数据库连接直接配置为192.168.10.2会 ...
- 3. Android框架和工具之 xUtils(BitmapUtils)
1. BitmapUtils 作用: 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象: 支持加载网络图片和本地图片: 内存管理使用 ...
- 【Mood-11】值得学习的国内外Android开发者信息
国内 Android 开发者信息: 昵称 GitHub 博客 介绍 罗升阳 Luoshengyang@csdn Android 源码分析 邓凡平 innost@csdn 阿拉神农 魏祝林 ...
- Android小项目之九 两种上下文的区别
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- 京东2017 C++一面
一面直接跪,日 1. 重写和重载的区别 答的一般 2. C++内存分配方式 不会 3. TCP ...
- Linux公社资料库地址
免费下载地址在 http://linux.linuxidc.com/用户名与密码都是http://www.linuxidc.com
- hdu 1530 最大团模板
说明摘自:pushing my way 的博文 最大团 通过该博主的代码,总算理解了最大团问题,但是他实现时的代码效率却不算太高.因此在最后献上我的模板.加了IO优化目前的排名是: 6 yejinru ...
- 转: adroid音视延迟 10ms的原因与解答
https://github.com/hehonghui/android-tech-frontier/blob/master/issue-9/Android%2010ms%E9%97%AE%E9%A2 ...
- 大部分人努力程度之低,根本轮不到拼天赋 [转自w3cschool]
2014-05-31 w3cschool 在过去的三个多月里,每周六一天的心理咨询师的培训课成了我一周中最重要最开心的事情之一.因为国庆节的缘故,从9月中旬到10月中旬培训中心都没有安排课程,因此习惯 ...
- html+css--水平居中总结(不定宽块状元素方法)(一)
来源:http://www.imooc.com/code/6363 在实际工作中我们会遇到需要为“不定宽度的块状元素”设置居中,比如网页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度 ...