2012-03-22 101 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