Имам следната дефиниция на дейност:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/inspectionMainLayout"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:singleLine="false"
android:id="@+id/breadCrumb"
android:visibility="gone">
</LinearLayout>
<ExpandableListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/expandableListView" />
</LinearLayout>
Сега в моя код добавям бутони динамично в breadCrumb LinearLayout:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inspection);
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.inspectionMainLayout);
if (mainLayout != null) {
ExpandableListView list = (ExpandableListView) findViewById(R.id.expandableListView);
list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView expandableListView, View view, int i, int i2, long l) {
LinearLayout breadCrumb = (LinearLayout) findViewById(R.id.breadCrumb);
Button filterButton = new Button(InspectionActivity.this);
filterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onFilterButtonClick((Button) view);
}
});
filterButton.setText(item.getFormattedFilter());
breadCrumb.addView(filterButton);
}
}
}
...
}
Този код работи добре, докато не променя ориентацията на устройството и активността ми се пресъздаде. Въпреки че целият код се изпълнява правилно, екранът изглежда не се актуализира. След като възстановя предишната ориентация, всички елементи изведнъж се появяват. Някаква идея защо и как да го поправя?
Благодаря
РЕДАКТИРАНЕ:
Мисля, че се натъквам на същия проблем, както е описано в тази публикация: Android: findViewById ми дава грешен указател?
Някаква идея как да се реши това?
Както поиска моят onRestoreInstanceState:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
baseCategories = savedInstanceState.getParcelable(BASE_CATEGORIES_STATE);
currentFilter = savedInstanceState.getParcelable(FILTERS_STATE);
}
и на onSaveInstanceState:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(BASE_CATEGORIES_STATE, baseCategories);
outState.putParcelable(FILTERS_STATE, currentFilter);
}
сега и двата ми класа изпълняват Parcelable интерфейс. Те се поддържат и възстановяват правилно.
Все пак за някои причини извикването на findViewById get ме насочва към грешен обект (не този, който е пресъздаден).
android:layout_height="50dp"
, защото с промяната на ориентацията височината също се променя - person Girish Nair   schedule 12.06.2014