当我改变屏幕方向时,Edittext会消失吗?

时间:2012-03-22 07:02:28

标签: android orientation android-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>

3 个答案:

答案 0 :(得分:2)

每次旋转设备时,活动都会重新启动,这就是您没有看到EditTexts的原因。

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

android:configChanges="orientation|keyboardHidden"

同时检查this以了解有关应用程序运行时更改的更多信息。

答案 1 :(得分:0)

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

答案 2 :(得分: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);
            }
        });

}