2

私の質問は、この未回答の質問と非常に似ていますが、いくつかの小さな違いがあります。

Scrollview内のTabHost:タブがクリックされると常に下にスクロールします

私のScrollViewは一番下までスクロールを開始し、その上にあるものではなくTabHostコンテンツを表示します(リンクされた質問のスクリーンショットを見ることができます、それは非常に似ています)。

手動で上にスクロールした場合、別のタブをクリックしてもScrollViewには影響しません。問題は、最初に表示されたときだけです。これが他の質問との違いです。

私が成功せずに試したこと:

  1. ScrollView内の最上位のコンポーネントをフォーカス可能にして、タブではなくフォーカスを取得できるようにします。
  2. またはを使用して、ScrollViewをonResume()メソッドの一番上まで強制的にスクロールします。また、初期化はうまくいきませんが、その後の呼び出しで効果的に一番上にスクロールします。sv.fullScroll(View.FOCUS_UP);sv.scrollTo(0, 0);onResume()

なぜこれが起こっているのかについてのアイデアはありますか?さらに調査するためのヒントも大歓迎です。

4

2 に答える 2

7

おそらくペドロを助けるには遅すぎますが、私は私のために働く解決策を見つけました。TabHostソースで、ビュー内の他にフォーカスがない場合にフォーカスを要求することに気付きました。そこで、スクロールビューの最初のコンポーネントがフォーカス可能であることを確認し、フォーカスを要求しました。

// Get the first component and make sure it is focusable. Note you have to use setFocusableInTouchMode and not setFocusable for this to work.
TextView v = (TextView) view.findViewById(R.id.first_component_in_view);
v.setFocusableInTouchMode(true);
v.requestFocus();

うまくいけば、これは誰かを助けるでしょう。

于 2012-05-04T03:36:36.070 に答える
1

私も同様の問題を抱えていますが、まだ解決していません。ただし、スクロールビューを強制的にスクロールするには、UIに投稿するために、別のスレッドを介して進行状況を更新する必要があります。例えば

quickScroll.post(new Runnable() {
                @Override
                public void run() {

                             quickScroll.scrollTo(0, 54);

                } 
            });

quickScrollは私のScrollViewです。これは、レイアウトを図式的に定義したか、カスタムビューグループから拡張したためだと思います。したがって、setContentViewはscrollViewへの参照を保持しないため、UIにScrollViewに割り当てられた変数を更新するように強制する必要があります。

于 2012-05-04T03:33:29.867 に答える