zoukankan      html  css  js  c++  java
  • 【Java】Android EditText开发的一个容易忽略的坑

      这几天接手做一个远程控制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     }
  • 相关阅读:
    SpeedPHP多入口设置 前台和后台入口分开
    php重定向 htaccess文件的编写
    SpeedPHP关于一对一和一对多关联关系的建立 model建立
    SpringMVC与Struts2关于controller线程安全问题
    编码问题 关于hibernate jdbc数据库连接在xml配置与在properties文件配置的差异
    SpringMVC可以配置多个拦截后缀*.html和.do等
    JavaSE replaceAll 方法
    Promise.race 的原理
    Promise.all 的原理
    标签联合
  • 原文地址:https://www.cnblogs.com/duye/p/8893529.html
Copyright © 2011-2022 走看看