跨屏幕旋转持续观看

时间:2012-01-14 17:25:07

标签: android android-view

Android新手,所以我正在编写小程序来熟悉工作原理。 到目前为止让我头疼的是在运行时与屏幕旋转相结合创建的视图。

在尝试使用包裹后运气不佳时,我通过在旋转后重新创建视图来解决问题。

程序会将输入的文本作为TextView添加到EditText下面的TableLayout。

有更好的解决方法吗?我找不到任何“开箱即用”的方法。

public class MWEActivity extends Activity {
    TableLayout table;
    EditText txtInput;
    ArrayList<String> savedEntry = new ArrayList<String>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        table = (TableLayout)this.findViewById(R.id.table);
        txtInput = (EditText)this.findViewById(R.id.txtInput);

        txtInput.setOnEditorActionListener(new OnEditorActionListener() {

            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){
                        TextView newtext = new TextView(getApplicationContext());
                        newtext.setText(txtInput.getText());
                        savedEntry.add(newtext.getText().toString());
                        table.addView(newtext);
                        txtInput.setText("");
                        return true;
                }
                return false;
            }
        });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putStringArrayList("entry", savedEntry);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if(savedInstanceState.getStringArrayList("entry") == null){
            savedEntry = new ArrayList<String>();
            savedEntry.add("Return was NULL");
        }else{
            savedEntry = savedInstanceState.getStringArrayList("entry");
        }

        for(String s : savedEntry){
            TextView tv = new TextView(getApplicationContext());
            tv.setText(s);
            table.addView(tv);
        }
        super.onRestoreInstanceState(savedInstanceState);
    }
}

2 个答案:

答案 0 :(得分:2)

你必须像以前的回答一样禁用方向改变,或者只是依靠 在标准设施上。它将暂停然后重新创建您的活动。不需要额外的代码。您还可以为不同的方向提供不同的布局:

http://developer.android.com/guide/practices/screens_support.html

答案 1 :(得分:-1)

您可以通过添加

来停止重新加载活动
        android:configChanges="orientation"

在活动的manifest.xml中并实现onConfigurationChanged。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

如果您的布局相同,则不需要做任何其他事情。