上一节我们看了系统参数的主界面,大家应该还有印象,如下

那本节我们来看一下修改和***。

上节我已经介绍了系统参数修改以及***的WebService,如下

其中系统参数修改的描述如下

系统参数***的定义如下


接下来我们需要知道的是如何实现修改和***按钮的功能。记得上节我们使用系统提供的SimpleAdapter去展示listview的数据。这样是无法实现按钮的响应的。所以在实现这两个按钮的功能之前,首先需要让他们能够响应点击事件。所以需要我们自己定义Adapter。

publicclasscustomAdapterextendsBaseAdapter{privateList<Map<String,Object>>dataList;privateLayoutInflatermInflater;privateContextcontext;privateString[]keyString;privateint[]valueViewID;Holderholder;publiccustomAdapter(Contextcontext,List<Map<String,Object>>dataList,intresource,String[]from,int[]to){this.dataList=dataList;this.context=context;mInflater=(LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);keyString=newString[from.length];valueViewID=newint[to.length];System.arraycopy(from,0,keyString,0,from.length);System.arraycopy(to,0,valueViewID,0,to.length);}@OverridepublicintgetCount(){returndataList.size();}@OverridepublicObjectgetItem(intposition){returndataList.get(position);}@OverridepubliclonggetItemId(intposition){returnposition;}publicvoidremoveItem(intposition){dataList.remove(position);this.notifyDataSetChanged();}publicViewgetView(intposition,ViewconvertView,ViewGroupparent){if(convertView!=null){holder=(Holder)convertView.getTag();}else{convertView=mInflater.inflate(R.layout.systemcodedetailtemplate,null);holder=newHolder();holder.labCname=(TextView)convertView.findViewById(valueViewID[0]);holder.labData=(TextView)convertView.findViewById(valueViewID[1]);holder.labDisplay=(TextView)convertView.findViewById(valueViewID[2]);holder.btnUpdate=(Button)convertView.findViewById(valueViewID[3]);holder.btnDelete=(Button)convertView.findViewById(valueViewID[4]);convertView.setTag(holder);}Map<String,Object>appInfo=dataList.get(position);if(appInfo!=null){Stringcname=appInfo.get(keyString[0]).toString();Stringdata=appInfo.get(keyString[1]).toString();StringdisplayContent=appInfo.get(keyString[2]).toString();holder.labCname.setText(cname);holder.labData.setText(data);holder.labDisplay.setText(displayContent);holder.btnDelete.setOnClickListener(newViewButtonListener(position));holder.btnUpdate.setOnClickListener(newViewButtonListener(position));}returnconvertView;}


在构造函数中我们传入了数据源,得到加载xml布局文件的实例化对象mInflater,以及传递进来的数据源Map<String, Object>中的key值,页面中的元素的id,用来和key值取到的value作对应匹配。

然后再覆盖BaseAdapter的一些方法。在这里主要看这个getView。


首先判断是否已经加载了根布局模版,如果已加载,则获取Holder,否则实例化holder,并将模版内的元素赋给Holder。这个Holder怎么理解呢,我觉得是xml布局模版上元素的载体。通过Holder可以拿到该模版上的任何元素。接下来这个appInfo就是当前界面上listview所选择的行的数据Map<String, Object>,所以在这里我们可以通过key值拿到value。难道以后将值赋给Holder载体中的各个对应元素

Stringcname=appInfo.get(keyString[0]).toString();Stringdata=appInfo.get(keyString[1]).toString();StringdisplayContent=appInfo.get(keyString[2]).toString();holder.labCname.setText(cname);holder.labData.setText(data);holder.labDisplay.setText(displayContent);

OK,这个其实就是重写实现listView的展示。接下来我们来看这次的重点

holder.btnDelete.setOnClickListener(newViewButtonListener(position));holder.btnUpdate.setOnClickListener(newViewButtonListener(position));

这两个按钮是我们第一幅图中的最右边的两个操作按钮。我们分别为其注册了单击事件监听,它的监听实现类是ViewButtonListener,我们看一下

classViewButtonListenerimplementsOnClickListener{privateintposition;Objectcname;Objectdata;ObjectdisplayContent;EditTexttxtEname;EditTexttxtCname;EditTexttxtData;EditTexttxtDisplayContent;EditTexttxtRemark;Viewlayout;ViewButtonListener(intposition){this.position=position;cname=dataList.get(position).get("cname");data=dataList.get(position).get("data");displayContent=dataList.get(position).get("displaycontent");LayoutInflaterinflater=getLayoutInflater();layout=inflater.inflate(R.layout.systemcodemodify,(ViewGroup)findViewById(R.id.modifyDialog));txtEname=(EditText)layout.findViewById(R.id.txtEname);txtCname=(EditText)layout.findViewById(R.id.txtCname);txtData=(EditText)layout.findViewById(R.id.txtData);txtDisplayContent=(EditText)layout.findViewById(R.id.txtDisplay);txtRemark=(EditText)layout.findViewById(R.id.txtRemark);}@OverridepublicvoidonClick(Viewview){intvid=view.getId();if(vid==holder.btnUpdate.getId()){txtEname.setText(owner.ename);txtCname.setText(cname.toString());txtData.setText(data.toString());txtDisplayContent.setText(displayContent.toString());txtEname.setEnabled(false);txtCname.setEnabled(false);txtData.setEnabled(false);finalAlertDialog.Builderbuilder=newAlertDialog.Builder(owner);builder.setIcon(R.drawable.info);builder.setTitle(R.string.titleSystemCodeModifyName);builder.setView(layout);builder.setPositiveButton(R.string.btnSave,null);builder.setNegativeButton(R.string.btnClose,null);finalAlertDialogdialog=builder.create();dialog.show();dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){if(txtDisplayContent.getText().toString().trim().length()==0){ShowMessage("显示值不能为空!");return;}SoapObjectsoapObject=newsystemcodedetail().ModifySystemCode(ename,data.toString(),txtDisplayContent.getText().toString().trim().toString(),txtRemark.getText().toString());BooleanisSuccess=Boolean.valueOf(soapObject.getProperty("IsSuccess").toString());if(isSuccess){ShowMessage(R.string.SaveSuccess);dialog.dismiss();}else{StringerrorMsg=soapObject.getProperty("ErrorMessage").toString();ShowMessage(errorMsg);}}});}elseif(vid==holder.btnDelete.getId()){SoapObjectsoapObject=newsystemcodedetail().DeleteSystemCode(ename,data.toString());BooleanisSuccess=Boolean.valueOf(soapObject.getProperty("IsSuccess").toString());if(isSuccess){ShowMessage(R.string.DeleteSuccess);}else{StringerrorMsg=soapObject.getProperty("ErrorMessage").toString();ShowMessage(errorMsg);}}}}classHolder{publicTextViewlabCname;publicTextViewlabDisplay;publicTextViewlabData;publicButtonbtnUpdate;publicButtonbtnDelete;}}

OK,我们看到了,在构造函数中,我们拿到了各个元素,因为我们的保存和***按钮的监听那个实现类都是ViewButtonListener。因此在Onclick事件中,我们需要得知是哪个按钮触发了事件。所以先获取一下id,如果id是btnUpdate。那么就走修改逻辑,否则走***逻辑。

首先来看一下修改逻辑,创建一个dialog,这个dialog加载的是一个activity,弹出的界面是什么呢,在构造函数中有这样一段

layout=inflater.inflate(R.layout.systemcodemodify,(ViewGroup)findViewById(R.id.modifyDialog));

在创建dialog的时候我们也看到了这句

builder.setView(layout);

所以弹出的界面就是R.layout.systemcodemodfy。我们来看一下这个界面

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/modifyDialog"android:orientation="vertical"><TableLayoutandroid:id="@+id/tabMain"android:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="3dip"android:stretchColumns="1"><TableRow><TextViewandroid:text="@string/labEname"android:textSize="6pt"android:gravity="right"/><EditTextandroid:id="@+id/txtEname"android:maxLength="25"android:singleLine="true"></EditText></TableRow><TableRow><TextViewandroid:text="@string/labCname"android:textSize="6pt"android:gravity="right"/><EditTextandroid:id="@+id/txtCname"android:maxLength="50"android:singleLine="true"></EditText></TableRow><TableRow><TextViewandroid:text="@string/labData"android:textSize="6pt"android:gravity="right"/><EditTextandroid:id="@+id/txtData"android:singleLine="true"></EditText></TableRow><TableRow><TextViewandroid:text="@string/labDisplay"android:textSize="6pt"android:gravity="right"/><EditTextandroid:id="@+id/txtDisplay"android:singleLine="true"></EditText></TableRow><TableRow><TextViewandroid:text="@string/labRemark"android:textSize="6pt"android:gravity="right"/><EditTextandroid:id="@+id/txtRemark"android:maxLines="4"></EditText></TableRow></TableLayout><!--<LinearLayoutandroid:orientation="horizontal"--><!--android:gravity="center_horizontal"android:layout_width="fill_parent"--><!--android:layout_height="wrap_content">--><!--<Buttonandroid:id="@+id/btnSave"android:layout_width="110dp"--><!--android:layout_height="45dp"android:layout_gravity="center_horizontal"--><!--android:text="@string/btnSave"android:textStyle="bold"--><!--android:textColor="@color/blue"></Button>--><!--<Buttonandroid:id="@+id/btnClose"android:layout_width="110dp"--><!--android:layout_gravity="center_horizontal"android:layout_height="45dp"--><!--android:text="@string/btnClose"android:textStyle="bold"--><!--android:textColor="@color/blue"></Button>--><!--</LinearLayout>--></LinearLayout>

OK,就是这个界面,table布局。

再往下看,就是这个setIcon(设置弹出页图标),setTitle(弹出页标题),setPostiveButton和setNegativeButton。大家都知道弹出页在点击按钮的时候总是会自动关闭掉,为了解决这一问题,我们的按钮点击事件进行了重写

dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){}}

在点击事件中,如果说验证没通过,界面不会关闭,否则关闭。我们来看一下效果,界面并没有关闭。

如果保存成功,则关闭界面

OK,我们接下来看看修改的调用

privateSoapObjectModifySystemCode(Stringename,Stringdata,Stringdisplay,Stringremark){SoapObjectrequest=newSoapObject(NAMESPACE,METHOD_NAME_PUT);SystemCodeEntitycodeEntity=newSystemCodeEntity();codeEntity.setProperty(0,ename);codeEntity.setProperty(2,data);codeEntity.setProperty(3,display);codeEntity.setProperty(4,remark);PropertyInfopi=newPropertyInfo();pi.setName("systemCodeEntity");pi.setValue(codeEntity);pi.setType(codeEntity.getClass());request.addProperty(pi);SoapSerializationEnvelopesoapEnvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);soapEnvelope.dotNet=true;soapEnvelope.setOutputSoapObject(request);HttpTransportSEhttpTS=newHttpTransportSE(URL);soapEnvelope.bodyOut=httpTS;soapEnvelope.setOutputSoapObject(request);//设置请求参数soapEnvelope.addMapping(NAMESPACE,"SystemCodeEntity",codeEntity.getClass());try{httpTS.call(SOAP_ACTION_PUT,soapEnvelope);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(XmlPullParserExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}SoapObjectresult=null;try{result=(SoapObject)soapEnvelope.getResponse();}catch(SoapFaulte){//TODOAuto-generatedcatchblocke.printStackTrace();}returnresult;}

在这里就不多讲了。再看一下***的代码

privateSoapObjectDeleteSystemCode(Stringename,Stringdata){SoapObjectrequest=newSoapObject(NAMESPACE,METHOD_NAME_DELETE);PropertyInfopi=newPropertyInfo();pi.setName("ename");pi.setType(String.class);pi.setValue(ename);request.addProperty(pi);pi=newPropertyInfo();pi.setName("data");pi.setType(String.class);pi.setValue(data);SoapSerializationEnvelopesoapEnvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);soapEnvelope.dotNet=true;soapEnvelope.setOutputSoapObject(request);HttpTransportSEhttpTS=newHttpTransportSE(URL);soapEnvelope.bodyOut=httpTS;soapEnvelope.setOutputSoapObject(request);//设置请求参数try{httpTS.call(SOAP_ACTION_DELETE,soapEnvelope);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(XmlPullParserExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}SoapObjectresult=null;try{result=(SoapObject)soapEnvelope.getResponse();}catch(SoapFaulte){//TODOAuto-generatedcatchblocke.printStackTrace();}returnresult;}

OK,本篇到此为止。

更多相关文章

  1. 总结Android(安卓)App内存优化之图片优化
  2. 第三部分:Android(安卓)应用程序接口指南---第二节:UI---第二章 输
  3. android app -- 关于listview的几种用法(复用,不复用,半复用)解决ite
  4. Android(安卓)Broadcast receiver 编程
  5. 第一节 登录界面
  6. Android(安卓)studio 自定义logcat各种信息输出颜色
  7. 代码实现android的一个登录界面
  8. Android——自定义TabLayout背景,实现类似浏览器中的选项卡效果,修
  9. Android(安卓)ZXing 超简单的实现二维码扫描、可以自定义界面

随机推荐

  1. android 电话拨号器
  2. Android的NDK开发(3)————JNI数据类型
  3. Android官方UI
  4. Android(安卓)检测网络是否打开
  5. Android(安卓)OneDayOneExample-2. 读取电
  6. Android版本28使用http请求报错not permi
  7. iPhone Like Toolbar for Android
  8. android 文件管理工具类
  9. Android(安卓)SQLite数据库
  10. Android(安卓)之NavigationView&Toolbar&