編輯:關於Android編程
ContentProvider(內容提供者)android四大基本組件之一。主要是跨應用共享數據的方式之一,ContentProvider分為自定義和系統定義,如聯系人就是系統定義。
ContentProvider(內容提供者)主要方法:
public boolean onCreate()該方法在ContentProvider創建時調用 public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1)查詢指定的ContentProvider返回一個Cursor結果。 public Uri insert(Uri uri, ContentValues contentValues)向指定的ContentProvider添加數據。 public int delete(Uri uri, String s, String[] strings)向指定ContentProvider進行刪除操作。 public int update(Uri uri, ContentValues contentValues, String s, String[] strings)對指定ContentProvider進行修改操作。 public String getType(Uri uri)返回指定ContentProvider數據類型。ContentResolver(內容訪問者):
當外部應用需要使用ContentProvider時,需要通過ContentResolver來對ContentProvider進行增、刪、該、查,而ContentResolver可以通過getContentResolver()方法來獲取。
在訪問者應用中還需要定義Uri,Uri的定義必須規范如:
“content://com.example.myandrioid_24.PERSON” 其中content://與http://類似
下面是ContentProvider+ContentResolver+ListView實現的簡單示例:
ContentProvider(內容提供者):
private SQLiteDatabase db;
@Override
public boolean onCreate() {
DBHelper dbHelper=new DBHelper(getContext(),"person.db",null,2);
db = dbHelper.getReadableDatabase();
return false;
}
@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
return db.query(false,"person",strings,s,strings1,null,null,null,null);
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
db.insert("person",null,contentValues);
return uri;
}
@Override
public int delete(Uri uri, String s, String[] strings) {
return db.delete("person",s,strings);
}
@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
return db.update("person",contentValues,s,strings);
}
提供者應用清單文件:
ContentResolver(內容訪問者):
private EditText et_main_id;
private EditText et_main_name;
private EditText et_main_age;
private ContentResolver cr;
private Uri uri;
private ListView lv_main_list;
private SimpleCursorAdapter simpleCursorAdapter;
private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取控件
et_main_id = (EditText)findViewById(R.id.et_main_id);
et_main_name = (EditText)findViewById(R.id.et_main_name);
et_main_age = (EditText)findViewById(R.id.et_main_age);
lv_main_list = (ListView) findViewById(R.id.lv_main_list);
//獲取內容提供者
cr = getContentResolver();
//獲取內容提供者地址
uri = Uri.parse("content://com.example.myandrioid_24.PERSON");
//通過內容提供者獲取Cursor
cursor = cr.query(uri,null,null,null,null);
//設置listView適配器
simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_list_view, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_id,R.id.tv_item_name,R.id.tv_item_age});
lv_main_list.setAdapter(simpleCursorAdapter);
//listView點擊事件
lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView adapterView, View view, int i, long l) {
//獲取當前點擊的值
LinearLayout linearLayout= (LinearLayout) view;
final String id=((TextView)linearLayout.findViewById(R.id.tv_item_id)).getText().toString();
final String name=((TextView)linearLayout.findViewById(R.id.tv_item_name)).getText().toString();
final String age=((TextView)linearLayout.findViewById(R.id.tv_item_age)).getText().toString();
//彈出對話框(自定義)
final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
final AlertDialog dialog=builder.create();
//設置點擊空白,不取消對話框
dialog.setCancelable(false);
//解析布局文件
final View v=getLayoutInflater().inflate(R.layout.my_dialog,null);
((TextView)v.findViewById(R.id.tv_my_dialog_id)).setText("修改:"+id);
((EditText)v.findViewById(R.id.et_my_dialog_name)).setText(name);
((EditText)v.findViewById(R.id.et_my_dialog_age)).setText(age);
//確定修改
((Button)v.findViewById(R.id.btn_my_dialog_ok)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//獲取修改的值
final String names=((EditText)v.findViewById(R.id.et_my_dialog_name)).getText().toString();
final String ages=((EditText)v.findViewById(R.id.et_my_dialog_age)).getText().toString();
//
ContentValues contentValues=new ContentValues();//Map
contentValues.put("name",names);
contentValues.put("age",ages);
cr.update(uri,contentValues,"_id=?",new String[]{id});
//添加後更新數據
cursor=cr.query(uri,null,null,null,null);
//通知適配器發生改變
simpleCursorAdapter.changeCursor(cursor);
//關閉彈出框
dialog.dismiss();
}
});
//取消修改
((Button)v.findViewById(R.id.btn_my_dialog_no)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
dialog.setView(v);
dialog.show();
}
});
}
//添加的方法
public void getInsert(View view){
if (TextUtils.isEmpty(et_main_name.getText().toString())&&TextUtils.isEmpty(et_main_age.getText().toString())) {
//獲取添加的值
String name=et_main_name.getText().toString();
int age=Integer.parseInt(et_main_age.getText().toString());
//添加的值
ContentValues values=new ContentValues();
values.put("name",name);
values.put("age",age);
//主鍵自動增長,所以不能手動賦值
values.putNull("_id");
//調添加的方法
cr.insert(uri,values);
//添加後更新數據
cursor=cr.query(uri,null,null,null,null);
//通知適配器發生改變
simpleCursorAdapter.changeCursor(cursor);
}else {
Toast.makeText(this, "名字、年齡不能為空", Toast.LENGTH_SHORT).show();
}
}
//刪除的方法
public void getDelete(View view){
int id=Integer.parseInt(et_main_id.getText().toString());
//判斷id是否為空
if (TextUtils.isEmpty(et_main_id.getText().toString())) {
cr.delete(uri,"_id=?",new String[]{id+""});
//刪除後更新數據
cursor=cr.query(uri,null,null,null,null);
//通知適配器發生改變
simpleCursorAdapter.changeCursor(cursor);
}else{
Toast.makeText(this, "ID不能為空", Toast.LENGTH_SHORT).show();
}
}
Android開發UI特效
Android中UI特效 android經典開源代碼分享 本文原始網址 作者為23code,歡迎給作者投稿 其它UI相關的網址: https://github.co
android項目之通訊錄數據庫
Android通訊錄的制作有很多種方式,網上大部分也都有了,但是用數據庫制作通訊錄的卻少之又少,這裡我就制作一個簡單的app供大家學習先看一下效果圖,在下面有提供項目源碼
怎樣防止App在後台運行,點擊應用桌面圖標重新啟動?
在項目中,遇到一個問題百思不得其解,那就是:我在app使用過程中,點擊了home鍵,然後去看看微信之類的其他應用,這個時候再點擊app桌面的圖標,這個時候app是重新啟動
Android打造(ListView、GridView等)通用的下拉刷新、上拉自動加載的組件
前言 下拉刷新組件在開發中使用率是非常高的,基本上聯網的APP都會采用這種方式。對於開發效率而言,使用獲得大家認可的開源庫必然是效率最高的,但是不重復發明輪子的