我在说 MainMenuActivity 中有一个带有 LinearLayout 的 HorizontalScrollView,我用 3 个按钮填充它。让我们称之为 State1。
A B C
单击其中一个按钮--> 从 LinearLayout 中删除这些按钮,并将其他 3 个自定义视图添加到同一个 LinearLayout。让我们称之为 State2
E F G
单击任何 EFG 会启动另一个活动。为了从 state1 到 state2,我为每个 EFG 膨胀 View 并将这些视图添加到 LinearLayout。
我的问题:回到我的 MainMenu Activity 后,我希望 ScrollView 显示 EF G。由于某些其他原因它没有显示(我进入 Cocos2dx)。它显示 AB C。
当从任何活动返回到 MainMenu 时,我能够为 State2 增加视图,但视图在屏幕上不可见。LinearLayout 应该有 3 个孩子,但它们不可见。事实上整个 LinearLayout 是不可见的。
它第一次工作(从ABC到EFG)。但不是我第二次直接进入 EFG State
我的 HorizontalScrollView 看起来像这样
<HorizontalScrollView
android:id="@+id/mainHZScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clipChildren="true"
android:scrollbars="none"
android:background="@android:color/black">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:isScrollContainer="true"
android:layout_gravity="center_vertical"
android:id="@+id/scrollInnerLayout"
android:background="@android:color/white">
</LinearLayout>
</HorizontalScrollView>
这就是我为 EF G 填充 ScrollView 的方式。
private void fillScrollViewWithRoomList(ArrayList<HashMap<String, String>> roomArr){
Log.d("MainAct", "fillScrollViewWithRoomList: "+roomArr.toString());
HorizontalScrollView mainMenuScroll = (HorizontalScrollView) findViewById(R.id.mainHZScrollView);
LinearLayout scrollInnerLayout = (LinearLayout) mainMenuScroll.findViewById(R.id.scrollInnerLayout);
//Remove Existing Contents
scrollInnerLayout.removeAllViews();
for (int i = 0; i < roomArr.size(); i++) {
Log.d("MainAct", "fillScrollViewWithRoomList For Loop ");
View roomView = View.inflate(this, R.layout.room_view, null);
/*
* Get contents from ArrayList and
* Fill roomView TextViews Here
*/
scrollInnerLayout.addView(roomView);
}
int inScrollChildCnt = scrollInnerLayout.getChildCount();
Log.d("MainAct", "inScrollChildCnt "+ inScrollChildCnt);
Log.d("MainAct", "fillScrollViewWithRoomList Complete");
}
在 onResume() 中,我检查要在 ScrollView 中显示的内容。roomArr 的数据来自服务器。从 onResume() 发送的请求。我在处理程序中解析它并显示。所以一切都在 UI Thread 上完成。roomArr 打印所有值并且 inScrollChildCnt = 3,这是 roomArr 的计数。