澳门新葡亰平台官网将 Activity 拆分为多个类,其他类中如何用 findViewById()、getText()

澳门新葡亰平台官网 1

初次开发安卓时,往往代码比较简单,全部写在一个
Activity.java 文件中即可。但是稍微有点代码量的项目,都不可能有所有代码写在一个
.java 文件中,那么我们就要拆开。

方法一.利用View.OnKeyListener”同步”显示

澳门新葡亰平台官网 , 安卓对Edittext监听的问题
public class MainActivity extends ActionBarActivity { private EditText first; private EditText second; private TextView result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); first = findViewById(R.id.first); second= findViewById(R.id.second); result= findViewById(R.id.result); first.addTextChangedListener(textwatcher); second.addTextChangedListener(textwatcher); } private TextWatcher textwatcher =new TextWatcher() { int f=Integer.parseInt(first.getText().toString; int s=Integer.parseInt(second.getText().toString; @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub result.setText; } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } };

Java 的类没有
partial 这个关键词(C# 有),所以要拆开就必须拆开为不同的类。这个根据功能来拆即可。比如我们在项目中发现有太多的
EditText 都使用同一个 TextWatcher,且这个
TextWatcher 的代码量还不小,我们就把这个 TextWatcher 拆出来。

    

为什么编译时没有显示错误 但运行在模拟器上确程序出错停止运行了呢

澳门新葡亰平台官网 1

 

拆出来会遇到一些问题,比如我们在 TextWatcher 中使用了
findViewById 发现不能使用了,这是由于只有派生自
Activity 的类才能使用 findViewById,那是不是我们让新建的类 extends
Activity 就可以了呢?显然不是,我们不是为了使编译通过就了事。

 

解决办法:

Java代码 

public class BiJiaTextWatcher implements TextWatcher { protected
Activity mActivity; public BiJiaTextWatcher(Activity activity) {
mActivity = activity; } public void beforeTextChanged(CharSequence s,
int start, int count, int after) { } public void
onTextChanged(CharSequence s, int start, int before, int count) {
EditText price1 = (EditText)mActivity.findViewById(R.id.price1); }
public void afterTextChanged(Editable s) { } } public class MainActivity
extends Activity { @Override protected void onCreate(Bundle
savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); EditText price1 =
(EditText)findViewById(R.id.price1); EditText volume1 =
(EditText)findViewById(R.id.volume1); BiJiaTextWatcher w1 = new
BiJiaTextWatcher(this); price1.addTextChangedListener(w1);
volume1.addTextChangedListener(w1); } }

 澳门新葡亰平台官网 2

Activity 也可以是 View,只是调用方式不同。

  1. EditText  myEdit = (EditText)findViewById(R.id.myEdit);  
  2. TextView myText = (TextView)findViewById(R.id.myText);  
  3. myEdit.setOnKeyListener(new EditText.OnClickListener(){  
  4. public boolean onKey(View v , int keyCode  , KeyEvent event)  
  5. {  
  6.        myText.setText(myEdit.getText());  
  7.        return false;  
  8. }  
  9. });  

错误做法:

方法二.  利用TextWatcher,真正实现同步

网上有人说这样做:

Java代码 

View v = View.inflate(this, R.layout.activity_main, null); EditText et
= (EditText)v.findViewById(R.id.quantity2);

 澳门新葡亰平台官网 3

这样做虽然运行时不报错,也取到了 EditText,但是取到的这个
EditText 并不是用户看到的这个 EditText,所以
getText().toString() 取到的全部是
EditText 的初始值,并不是用户实际的输入值。

  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.text.Editable;  
  4. import android.text.TextWatcher;  
  5. import android.widget.EditText;  
  6. import android.widget.TextView;  
  7.   
  8. public class TextWatcherDemo extends Activity implements TextWatcher{  
  9.     /** Called when the activity is first created. */  
  10.     private TextView myText;  
  11.     private EditText myEdit;  
  12.     @Override  
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.main);  
  16.           
  17.         myText=(TextView)findViewById(R.id.text);  
  18.         myEdit=(EditText)findViewById(R.id.edit);  
  19.           
  20.         myEdit.addTextChangedListener(this);  
  21.     }  
  22.     @Override  
  23.     public void afterTextChanged(Editable s) {  
  24.         // TODO Auto-generated method stub  
  25.           
  26.     }  
  27.     @Override  
  28.     public void beforeTextChanged(CharSequence s, int start, int count,  
  29.             int after) {  
  30.         // TODO Auto-generated method stub  
  31.           
  32.     }  
  33.     @Override  
  34.     public void onTextChanged(CharSequence s, int start, int before, int count) {  
  35.         // TODO Auto-generated method stub  
  36.         myText.setText(myEdit.getText());  
  37.     }  
  38.       
  39. }  
You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图