【Java】Android EditText开发的一个容易忽略的坑

时间:2022-06-15 03:25:48

  这几天接手做一个远程控制Android application,安卓前台的EditText用来输入ip地址、端口等信息,发现EditText的使用存在着巨坑一个!

  我在网上找了半天,发现仅仅有人提出这个困惑,却没有解决。因此写篇文章来解一下。

  EditText中,可以预先写好内容,用android:Text="..."属性。但问题是,当我更改输入内容时,后台却无法获取!如下:

XML布局:

 <EditText
            android:id="@+id/editIP"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="http://192.168.1.1"
            />

后台获取:

1 public class mainClass{
2     public EditText EditIP;
3     EditIp = (EditText)findViewById(R.id.editIp);
4     String text = EditIp.getText().toStirng();
5     //....  
6 }

发现text并没有获取到前台输入的任何信息!

解决:

问题在于:程序执行上述2、3、4行,只是一瞬间的事,你还没输入完,它就过去了!即获取输入内容并不是堵塞的!

解决方法就是,在某个堵塞的行为之前获取,比如你在点击按钮之前获取,这样程序保证获取到的输入是你写在EditText中的!

即:

 1 public class MyMainFrm extends Activity {
 2 
 3     public EditText CameraIP,ControlIP,Port;
 4     public Button Button_go;
 5     public String videoUrl,controlUrl,port;
 6     //public static String CameraIp;
 7     /** Called when the activity is first created. */
 8     @Override
 9     public void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11     
12 
13         setContentView(R.layout.mymainfrm);    
14 
15         
16         Button_go = (Button) findViewById(R.id.button_go);
17         
18 
19         Button_go.requestFocusFromTouch();
20 
21         
22         Button_go.setOnClickListener(new Button.OnClickListener() 
23         {
24             public void onClick(View v) {
25                 // TODO Auto-generated method stub
26                         //在这里获取,点击button_go之前,你肯定输入完成了
27     
28             CameraIP = (EditText) findViewById(R.id.editIP);
29             ControlIP = (EditText) findViewById(R.id.ip);
30             Port = (EditText) findViewById(R.id.port);
31 
32             videoUrl = CameraIP.getText().toString();
33             controlUrl = ControlIP.getText().toString();
34             port = Port.getText().toString();
35 
36 
37             //生成一个Intent对象
38                 Intent intent = new Intent();
39                 //在Intent对象当中添加一个键值对
40                 intent.putExtra("CameraIp", videoUrl);
41                 intent.putExtra("ControlUrl", controlUrl);
42                 intent.putExtra("Port", port);
43                 
44                 intent.putExtra("Is_Scale", true);
45                 //设置Intent对象要启动的Activity
46                 intent.setClass(MyMainFrm.this, MyVideo.class);
47                 //通过Intent对象启动另外一个Activity
48                 MyMainFrm.this.startActivity(intent);
49                 finish();  
50                 System.exit(0);  
51             }
52         });
53     
54     }