編輯:關於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經典開源代碼分享 本文原始網址 作者為23code,歡迎給作者投稿 其它UI相關的網址: https://github.co
Android通訊錄的制作有很多種方式,網上大部分也都有了,但是用數據庫制作通訊錄的卻少之又少,這裡我就制作一個簡單的app供大家學習先看一下效果圖,在下面有提供項目源碼
在項目中,遇到一個問題百思不得其解,那就是:我在app使用過程中,點擊了home鍵,然後去看看微信之類的其他應用,這個時候再點擊app桌面的圖標,這個時候app是重新啟動
前言 下拉刷新組件在開發中使用率是非常高的,基本上聯網的APP都會采用這種方式。對於開發效率而言,使用獲得大家認可的開源庫必然是效率最高的,但是不重復發明輪子的