SuperDHQ 2012-12-03
1、android与js代码交互:
①.在android中调用js方法:
android中调用js方法为WebView.loadUrl(“javascript:function()”);但是这样调用不能去得js方法的返回值。
②.在js中调用android的方法:
在android中:WebView.addjavascriptinterface(newObject(){
//这里写方法
Stringusername;
PublicvoidsetName(finalStringname){
username=name;
}
},”demo”);//demo为这个接口的名字,可以任意命名
在js中:window.demo.setName(“zhangshan”);//这里调用时接口名称必须和android端声明的名字一致。
③.在android中取得js方法的返回值:
直接用Webview.loadUrl(“javascript:function()”);无法获得js中的返回值,所以要取得js方法的返回值,先在andoird端声明变量,然后在js方法中调用android方法给这个变量赋值,这样当android调用这个js时,js就给android端的变量赋值了,这个变量可以是js方法返回值。
2、android存取简单值的方法SharedPreferences:
存取简单的值,比如说一个用户名和密码,可以用SharedPreference实现。
存入值步骤:
首先获得Context对象:Contextcontext=ActivityName.this;
获得SharedPreferences对象:
SharedPreferencespref=context.getSharedPreferences(“prefname”,MODE_PRIVATE);
获得Editor对象:Editoreditor=prefname.edit();
存入键值对:editor.putString(“name”,”zhangsan”);
提交:editor.commit();
取得值步骤:
Contextcontext=ActivityName.this;
SharedPreferencespref=context.getSharedPreferences(“prefname”,MODE_PRIVATE);
Stringusername=pref.getString(“name”,””);
3.Activity之间的跳转和广播实现结束别的Activity功能:
Activity跳转到别的Activity使用intent实现:
Intentintent=newIntent(Activity.this,otherActivity.class);
startActivity(intent);
如果传递参数跳转:
Bundlebundle=newBundle();
bundle.putString(“name”,”zhangshan”);
bundle.putInt(“count”,5);
Intentintent=newIntent(Activity.this,otherActivity.class);
Intent.putExtras(bundle);
startActivity(intent);
Activity.this.finish();//结束次Activity
如果在AActivity中随意关闭BActivity:
在AActivity中注册广播:
privateBroadcastReceiverbroadcastReceiver=newBroadcastReceiver(){//定义广播,用以在AccountActivity中调用来动态结束ms02Activity
@Override
publicvoidonReceive(Contextcontext,Intentintent){
//TODOAuto-generatedmethodstub
finish();
}
};
@Override
protectedvoidonResume(){
//TODOAuto-generatedmethodstub
super.onResume();
IntentFilterintentFilter=newIntentFilter();
intentFilter.addAction("android.intent.action.MAIN");
registerReceiver(broadcastReceiver,intentFilter);
}
在BActivity中调用:
sendBroadcast(newIntent(“android.intent.action.MAIN”));
4.android中sqlite数据库的使用:
首先定义DbHelper类:用于创建表:
publicclassDbHelperextendsSQLiteOpenHelper{
publicDbHelper(Contextcontext,Stringname,CursorFactoryfactory,
intversion){
super(context,name,factory,version);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
Stringsql="CREATETABLEms_account(_idINTEGERPRIMARYKEYAUTOINCREMENTNOTNULL,accountVARCHAR,passwordVARCHAR)";
db.execSQL(sql);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
}
}
在应用sqlite的Activity中:
//SQLiteDatabase对象
SQLiteDatabasedb;
//数据库名
publicStringdb_name="ms02.sqlite";
//表名
publicStringtable_name="ms_account";
//辅助类名
finalDbHelperhelper=newDbHelper(this,db_name,null,1);
db=helper.getWritableDatabase();
对数据库的写入:
SQLiteDatabasedb;
ContentValuescv=newContentValues();
cv.put(“account”,”zhangshan”);
db.insert(tablename,””,cv);
删除数据:
SQLiteDatabasedb;
Db.delete(“表名”,“字段=?”,字段值,null);
查询数据:
SQLiteDatabasedb;
Cursorc=db.query(“表名”,newString[]{“字段”,“字段1”},“字段=?”,newString[]{字段的值},null,null,null);
While(c.movetonext()){
Strings=c.getString(c.getcolumnindex(“字段1”));
}
更新数据:
ContentValuescv=newContentValues();
cv.put(“字段”,“字段值”);
cv.put(“字段1”,“字段值“);
db.update(“表名”,cv,”字段=“,”字段值”,null)
5.listview中item用textview实现:
在layout中添加listitem.xml文件:文件内容为添加一个checkbox和一个textview。
在Activity中自定义适配器继承basaAdapte:
//自定义ListView适配器
classMyListAdapterextendsBaseAdapter{
List<Boolean>mChecked;
ArrayListarraylist;
HashMap<Integer,View>map=newHashMap<Integer,View>();
publicMyListAdapter(ArrayListlist){
arraylist=newArrayList();
arraylist=list;
mChecked=newArrayList<Boolean>();
for(inti=0;i<list.size();i++){
mChecked.add(false);
}
}
@Override
publicintgetCount(){
returnarraylist.size();
}
@Override
publicObjectgetItem(intposition){
returnarraylist.get(position);
}
@Override
publiclonggetItemId(intposition){
returnposition;
}
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
Viewview;
ViewHolderholder=null;
if(map.get(position)==null){
//Log.e("MainActivity","position1="+position);
LayoutInflatermInflater=(LayoutInflater)getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=mInflater.inflate(R.layout.listitem,null);
holder=newViewHolder();
holder.selected=(CheckBox)view
.findViewById(R.id.list_select);
holder.name=(TextView)view.findViewById(R.id.list_name);
finalintp=position;
map.put(position,view);
holder.selected.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
CheckBoxcb=(CheckBox)v;
mChecked.set(p,cb.isChecked());
}
});
view.setTag(holder);
}else{
Log.e("MainActivity","position2="+position);
view=map.get(position);
holder=(ViewHolder)view.getTag();
}
holder.selected.setChecked(mChecked.get(position));
holder.name.setText(arraylist.get(position).toString());
returnview;
}
}
staticclassViewHolder{
CheckBoxselected;
TextViewname;
}
6.动态添加布局文件:
声明layoutinflater类:
LayoutInflaterinflater=(LayoutInflater)Activity.this.getSystemService(Content.Layout.inflater.services);
获取layout中的xml布局文件item:
Linearlayoutlayout=(Linearlayout)inflater.inflater(R.layout.xxxxx,null);
获取布局文件item中的控件:
Edittexted=(Edittext)layout.findViewbyId(R.id.xxxxxx);
把获取到的布局文件添加到对话框中:
AlertDialog.Buidlerb=newBuilder(Activity.this);
b.setview(layout);
7对话框与Toast共存问题:
先定义这个方法,然后在对话框中弹出Toast时,掉用这个方法,使这个方法保持窗口不关闭,要关闭时也要调用。
//手动设置dialog是否可以关闭
privatevoidholdDialog(DialogInterfacedialog,booleanflag){
try{
Fieldfield=dialog.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog,flag);
}catch(Exceptione){
e.printStackTrace();
}
}
调用:holdDialog(dialogtrue);
holdDialog(dialogfalse);
8.对话框的使用:
对话框定义和调用分为动态生成和预定义:动态生产就是使用的时候动态临时生存dialog不用事先声明方法,预定义,必须先重写dialog的oncreatedialog方法。
预定义:
重写dialog的oncreatedialog(intid)方法:
在里面调用AlertDialog.builderb=newbuilder(Acitivity.this);
生成对话框,然后添加对话框的内容等。
调用对话框的时候可以通过id调用不同的对话框:showdialog(intid);
动态生成:直接在调用的时候编写:
AlertDialog.builderb=newbuilder(Activity.this);
生成对话框,然后添加对话框内容等等。