有一种编辑是刚开始界面不可以编辑,点击编辑按钮后,可以对页面上的信息进行编辑。(这种没有写过)
今天要记录的是所有要编辑的item,点击都是跳转到同一界面,保存后反传值到之前点击的item。
像这个界面,我要添加一个客户
点击item,都是跳转到以下界面,标题根据点击的item变化
添加界面的点击事件代码
@Event(value = {R.id.rl_name, R.id.rl_sex, R.id.rl_tel, R.id.rl_email, R.id.rl_address})
private void onItemClick(View v) {
startActiviIntent.setClass(App.getInstance(), ActivityEdit.class);
Bundle bundle = new Bundle();//新建一个bundle存值
switch (v.getId()) {
case R.id.rl_name:
bundle.putString("title", "客户姓名");
bundle.putString("target", tvName.getText().toString());
bundle.putString("code", "1");
startActiviIntent.putExtras(bundle);
startActivityForResult(startActiviIntent, 1);
break;
case R.id.rl_sex://系统自带的单选框
/* new AlertDialog.Builder(this).setTitle("性别").setSingleChoiceItems(
new String[]{"男", "女"}, 0,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();*/
break;
case R.id.rl_tel:
bundle.putString("title", "客户电话");
bundle.putString("target", tvTel.getText().toString());
bundle.putString("code", "2");
startActiviIntent.putExtras(bundle);
startActivityForResult(startActiviIntent, 2);
break;
case R.id.rl_email:
bundle.putString("title", "客户邮箱");
bundle.putString("target", tvEmail.getText().toString());
bundle.putString("code", "3");
startActiviIntent.putExtras(bundle);
startActivityForResult(startActiviIntent, 3);
break;
case R.id.rl_address:
bundle.putString("title", "客户地址");
bundle.putString("target", tvAddress.getText().toString());
bundle.putString("code", "4");
startActiviIntent.putExtras(bundle);
startActivityForResult(startActiviIntent, 4);
break;
default:
break;
}
}
编辑界面代码
Intent intent = getIntent();
String message = intent.getStringExtra("target").toString().trim();
code=intent.getStringExtra("code").toString().trim();
tvTitle.setText(intent.getStringExtra("title").toString().trim());
etData.setText(message);
etData.setSelection(message.length());// 使光标置于文末
根据key获取相应的值,在界面上显示,将输入的信息使用bundle类存储起来,再反过去传给点击的item
@Event(R.id.btn_save)
private void onSaveClick(View view){
Bundle bundle = new Bundle();
switch (code){
//1-4:目标客户 6-8:预订车辆客户信息 10-17:我的资料
case "1":
etData.setInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);//设置输入类型
bundle.putString("reTarget",etData.getText().toString().trim());//再次存储
ActivityEdit.this.setResult(11, ActivityEdit.this.getIntent().putExtras(bundle));
finish();
break;
case "2":
etData.setInputType(InputType.TYPE_CLASS_PHONE);
bundle.putString("reTarget",etData.getText().toString().trim());
ActivityEdit.this.setResult(22, ActivityEdit.this.getIntent().putExtras(bundle));
finish();
break;
case "3":
etData.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
bundle.putString("reTarget",etData.getText().toString().trim());
ActivityEdit.this.setResult(33, ActivityEdit.this.getIntent().putExtras(bundle));
finish();
break;
case "4":
bundle.putString("reTarget",etData.getText().toString().trim());
ActivityEdit.this.setResult(44, ActivityEdit.this.getIntent().putExtras(bundle));
finish();
break;
}
}
回到添加客户界面,通过onActivityResult方法获取返回值
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {//一定要进行非空判断,不然没有值传递的时候会报错
Bundle bundle = data.getExtras();
String content = bundle.getString("reTarget").toString().trim();
switch (resultCode){
case 11:
tvName.setText(content);
break;
case 22:
tvTel.setText(content);
break;
case 33:
tvEmail.setText(content);
break;
case 44:
tvAddress.setText(content);
break;
default:
break;
}
}
}
做好啦~
今天之前我还一直有个疑问,写完博客之后才发现我用的是requestCode而不是resultCode,我说怎么获取到的是1,2,3,4,而不是11,22,33,44
不过还是有个问题:我的输入框明明设置了输入类型,但是运行起来并没有限制(已解决)
这个问题是因为我把输入类型设置写在了点击事件里面,应该在页面启动的时候就根据前面的传值判断输入类型。