android总结

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);

生成对话框,然后添加对话框内容等等。

相关推荐