runOnUiThread阻止来自选框的TextView?

时间:2016-04-20 11:07:10

标签: java android android-fragments

假设我有一个Fragment TextView(我们称之为TextView A),其中包含String个单词,另一个TextView(TextView B)是一个计时器,由这样的处理程序更新...... mHandler.postDelayed(this, 100);

问题是每当Handler B的TextView每秒更新一次,就会阻止TextView A运行marquee animation

以下是我用来更新TextView B ...

的代码
public void updateTextViewB()
{
    Thread thread = new Thread() {

        @Override
        public void run() {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    // Code that set's the constantly updating time

                    mHandler.postDelayed(this, 100);
                }
            });
        }
    };

    thread.start();
}

有什么选择可以解决这个问题?我应该将焦点设置为TextView A?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并且解决了它。如果您的TextView A和B处于相同的布局,那么它们是兄弟姐妹,每次对任何兄弟(包括A本身)的焦点进行更新时,选取框动画将重新开始。每次更新B时,它都会请求焦点,以便重新启动选框动画。解?您需要做的就是将A放在自己的布局中,这样它就没有兄弟姐妹,只有一个父母。这是布局:

<LinearLayout
                android:id="@+id/mainLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    <TextView
                android:id="@+id/text_b"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="text being updated each second"
                />

    <LinearLayout
                android:id="@+id/marquee_text_container"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">


        <TextView
                android:id="@+id/text_b"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:marqueeRepeatLimit="marquee_forever"
                android:singleLine="true"
                android:text="Long text with marquee animation that keeps running on the screen :P :)"
                />
    </LinearLayout>
</LinearLayout>