动态添加的视图在Android中的方向上消失

时间:2013-07-29 10:22:21

标签: android dynamic view orientation layout-inflater

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

以下是代码:

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);

}

}

3 个答案:

答案 0 :(得分:3)

在manifest.xml标签中添加此行。

android:configChanges="keyboardHidden|orientation|screenSize"

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

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:-1)

将以下行添加到 TestContainerActivity 活动

android:ConfigChanges="keyboardHidden|orientation"