我有一个视图模板,它由 mainRelativeLayout
和 2组成,FrameLayouts
用于片段。(我附上了一张图像来可视化我的模板。)红色是RelativeLayout
,棕色和绿色是FrameLayouts
。
现在,棕色部分包含了一个很重但很漂亮的网格列表。绿色部分包含一个简单LinearLayout
的Image
(灰色)、Seekbar
(蓝色)和一个TextView
(粉红色)。
UI 线程上的SeekBar
进度每 1 秒更新一次。我注意到网格列表的滚动每 1 秒就会冻结。通过进行一些跟踪视图调试,我注意到该列表每 1 秒重新绘制一次。
最重要的是,我从开发者菜单中启用了实际设备上的“显示布局更新”选项。它显示了更有趣的视图 - 上面的所有内容都Seekbar
被重新绘制。为什么 SeekBar 视图更新会重绘上面的所有视图?
我无法显示很多代码,但我执行标准片段附件,然后在片段中创建一个具有特定睡眠期的线程,然后更新 ui-thread 上的搜索栏进度。
如果您需要更多信息,请告诉我,我会尝试更新线程。我今天花了 4-5 个小时试图理解它为什么会这样做——但没有成功......
主模板非常简单。就像是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bgwood"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/top_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_container" />
<FrameLayout
android:id="@+id/bottom_container"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="#ff111111" />
</RelativeLayout>
编辑:更多信息...
底部片段(绿色)包含类似于以下视图结构的内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/player_playercontainer"
android:layout_width="fill_parent"
android:layout_height="115dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_player"
android:gravity="center"
android:baselineAligned="false"
android:orientation="horizontal" >
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center|center_vertical"
android:background="#000000"
android:scaleType="fitXY"
android:src="@drawable/hdd" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="0.64"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="5dp"
android:shadowColor="#cc111111"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="1"
android:text="unknown"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#888"
android:textSize="13dp" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:max="100" />
</LinearLayout>
</LinearLayout>
将片段附加到底部布局:
if (bundle == null) {
FragmentTransaction fragmentTransaction = mManager.beginTransaction();
SourceListFragment fragment = BottomFragment();
fragmentTransaction.add(R.id.bottom_container, fragment).commit();
}
更新片段中的搜索栏:
/* Called every 1 sec */
void updateCallback(final int progress) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
if (seekBarView == null) {
seekBarView = (SeekBar) view.findViewById(R.id.progressBar);
}
seekBarView.setProgress()
});
}