7

我已经创建了要通过单击按钮动态添加到布局中的视图,但是当我旋转设备景观时,视图消失了。有人可以看看我的代码并解释如何阻止这种情况发生。

这是代码:

public class TestContainerActivity extends Activity implements OnClickListener {

LinearLayout containerLayout;
Button testButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_container);

    testButton = (Button)findViewById(R.id.testContainerButton1);
    testButton.setOnClickListener(this);        
    containerLayout = (LinearLayout)findViewById(R.id.testContainerLayout);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.test_container, menu);
    return true;
}


@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v==testButton){

        createNewLayout();

    }
}

public void createNewLayout(){

        LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View addView = layoutInflater.inflate(R.layout.container, null);
        TextView textviewTest = (TextView)addView.findViewById(R.id.containerTextView4);
        textviewTest.setText("TextView");

        containerLayout.addView(addView);

}

}
4

3 回答 3

4

在您的 manifest.xml 标签中添加这一行。

android:configChanges="keyboardHidden|orientation|screenSize"

这将避免您的活动在方向更改时重新创建。

于 2013-07-29T10:27:35.023 回答
1

最好尝试以新方向重新创建布局,而不是仅仅阻止方向更改。

在您的 onCreate 检查是否有保存的实例(由于方向更改),例如

if (savedInstanceState == null) {
      //create new button layout if previously clicked
}
else {
      //normal start
}

您可能需要保留一些值(在 Shared Prefs 或 onSavedInstanceState 中)。

这种方法比锁定方向更困难,但从长远来看,它是一种更好的方法,非常值得研究。

于 2013-07-29T10:35:55.773 回答
-1

将以下行添加到TestContainerActivity活动

android:ConfigChanges="keyboardHidden|orientation"
于 2013-07-29T10:25:37.840 回答