2012-03-22 66 views
1

提前致谢。当我改变屏幕方向时,Edittext消失了吗?

这是我的示例代码。每当我尝试运行它并更改屏幕方向时,编辑文本消失,我必须重新启动应用程序。 请帮我

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ed1=(EditText)findViewById(R.id.ed1); 
    ed2=(EditText)findViewById(R.id.ed2); 

    ed1.addTextChangedListener(new TextWatcher()       
    { 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
     } 

     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
     } 

     public void afterTextChanged(Editable arg0) {  
      ed2.setVisibility(View.INVISIBLE); 
     } 
    }); 

    ed2.addTextChangedListener(new TextWatcher()    
    { 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 

     }  

     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
     } 

     public void afterTextChanged(Editable arg0) { 
      ed1.setVisibility(View.INVISIBLE); 
     } 
    }); 
} 

这是我的main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TableLayout 
    android:id="@+id/table" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="25dip" 
    android:stretchColumns="0,1" > 

    <TableRow> 

     <TextView 
      android:id="@+id/text1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dip" 
      android:text="Edit Text 1" 
      android:textSize="15dip" /> 

     <EditText 
      android:id="@+id/ed1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dip" 
      android:layout_marginTop="20dip" 
      android:maxLength="10" 
      android:numeric="integer|decimal" /> 
    </TableRow> 

    <TableRow> 

     <TextView 
      android:id="@+id/or_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="5dip" 
      android:text="OR" 
      android:textSize="20dip" /> 
    </TableRow> 

    <TableRow> 

     <TextView 
      android:id="@+id/text2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dip" 
      android:text="Edit Text2" 
      android:textSize="15dip" /> 

     <EditText 
      android:id="@+id/ed2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dip" 
      android:layout_marginTop="20dip" 
      android:maxLength="10" 
      android:numeric="integer|decimal" /> 
    </TableRow> 
</TableLayout> 

+0

显示布局的main.xml文件 – 2012-03-22 07:05:20

+0

我已经添加它,请检查一下。 – Shri 2012-03-22 07:10:00

+0

你有main.xml的land-scape布局 – 2012-03-22 07:11:30

回答

2

你旋转你的设备的活动将重新启动每一次,这就是为什么你看不到你的EditTexts。

此行XML添加到您的活动清单文件

android:configChanges="orientation|keyboardHidden" 

还检查出this更多地了解运行时更改您的应用程序。

+0

这工作正常。 谢谢 – Shri 2012-03-22 08:01:58

+0

欢迎您 – 2012-03-22 08:03:15

0

似乎void afterTextChanged(Editable)方法被调用你的TextWatchers。在其他方法中,例如onResume()也许,你是否以编程方式设置EditTexts的文本?这可能是它的原因。 如果是这种情况,只需在恢复先前状态的位置再次使其可见即可。

+0

我想你的答案,但依然是编辑文本正在消失。 我正在使用settext来清除它们的值,但在取向改变时仍然不成功。 – Shri 2012-03-22 07:24:55

0

嗨,尝试将这些行添加到 '的onCreate' 方法

ed1.setVisibility(View.VISIBLE); 
ed2.setVisibility(View.VISIBLE); 

更新结束:

试试这个,也许它会帮助你。

public class MyActivity extends Activity { 
    [...] 
    private final boolean isEd1FirstChange = true; 
    private final boolean isEd2FirstChange = true; 
    [...] 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     isEd1FirstChange = true; 
     isEd2FirstChange = true; 

     ed1=(EditText)findViewById(R.id.ed1); 
     ed2=(EditText)findViewById(R.id.ed2); 

     ed1.addTextChangedListener(new TextWatcher()       
     { 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      } 

      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      } 

      public void afterTextChanged(Editable arg0) {  
       if (isEd1FirstChange) { 
        isEd1FirstChange = false; 
        return; 
       } 

       ed2.setVisibility(View.INVISIBLE); 
      } 
     }); 

     ed2.addTextChangedListener(new TextWatcher()       
     { 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      } 

      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      } 

      public void afterTextChanged(Editable arg0) {  
       if (isEd2FirstChange) { 
        isEd2FirstChange = false; 
        return; 
       } 

       ed1.setVisibility(View.INVISIBLE); 
      } 
     }); 

}

+0

nope,仍然两个edittext消失。 – Shri 2012-03-22 07:28:39

+0

看我的更新 – 2012-03-22 07:38:18

+0

非常感谢,它终于为我工作。 – Shri 2012-03-22 07:48:44