2017-07-21 3 views
1

ここに私の問題に直面するコード例です。コードネーム1 - クリック時にButtonのUIIDを変更しないようにする方法はありますか?

Container master, content; 
Button lockButton; 
void layout() { 
    master = new Container (new LayeredLayout()); 
    content = new Container (BoxLayout.y()); 
    content.setScrollableY (true); 
    lockButton = new Button (""); 
    lockButton.setUIID ("ButtonInvisible"); 
    lockButton.addActionListener ((e)->{ 
     unlock(); 
    }); 
    master.add(content); 
} 
void lock() { 
    master.add(lockButton); 
} 
void unlock() { 
    lockButton.remove(); 
} 

ButtonInvisible 非選択スタイルが等しい押さ、を選択しました。

問題の説明:ポインタがリリース上で、contentのスクロールが0で押されている間ダウン

    1. スクロールcontent呼び出しlock()(クリックlockButtonインターセプト)
    2. クリックcontentには
    3. それが返されます前の金額に。

    ボタンがクリックされたときにスタイルを変更するため、基になるコンテンツのバグを再確認/再検証するためです。ダイヤモンドの答え

    追加情報に従って

    更新:コンテナmaster

    SwipeableContainerの中央部分です。

    が開かれると、lock()が呼び出されます。

    SwipeableContainerが開いているときに、私はを呼び出すと、画面が奇妙にちらつきますが、動作は変更されません。ボタンが押されるたびにスクロールがゼロにジャンプします。

    多分それは重要である - コンテナ内Tabs成分content

    は、コード再検証のこのバージョンでは存在しない成分を添加しない又は除去されるため、このような問題の原因であるが、問題は依然として同じであることはできません。

    Container master, content; 
    Button lockButton; 
    void layout() { 
        master = new Container (new LayeredLayout()); 
        content = new Container (BoxLayout.y()); 
        content.setScrollableY (true); 
        lockButton = new Button (""); 
        lockButton.setUIID ("ButtonInvisible"); 
        lockButton.addActionListener ((e)->{ 
         unlock(); 
        }); 
        lockButton.setFocusable(false); 
        master.add(content).add(lockButton); 
    } 
    void lock() { 
        lockButton.setFocusable(true); 
    } 
    void unlock() { 
        swipeableContainer.close(); 
        lockButton.setFocusable(false); 
    } 
    
  • +0

    私は、この説明から問題を理解することは本当に難しいと感じています。しかしここに私が言うことができるいくつかのことがあります。ボタンはUIIDを変更しません。スタイルの変更は、スクロールの再検証や影響を与えません。いくつかのスクリーンショットやビデオは、何が起こったかを説明するために長い道のりを行くことができます –

    +0

    あなたの注意をお寄せいただきありがとうございます、私はできるだけ早くビデオを提供します。 –

    +0

    このことはシミュレータでのみ起こり、デバイス上ではすべてが完璧です。ごめんなさい。 –

    答えて

    2

    問題は発生しなかったlock()再検証を起動したとき、それによってlockButton正しく(スクロールは適用されません、それは唯一の適切あなたはmasterコンテナの任意の部分をクリックすると位置付けていますレイアウトされていなかったということです)。

    解決策は、コンテナとの間でコンポーネントの追加や削除などの主要なUI変更の後に、常にrepaint()/revalidate()または何らかの種類のアニメーションを呼び出すことです。

    Container master, content; 
    Button lockButton; 
    void layout() { 
        master = new Container (new LayeredLayout()); 
        content = new Container (BoxLayout.y()); 
        content.setScrollableY (true); 
        lockButton = new Button (""); 
        lockButton.setUIID ("ButtonInvisible"); 
        lockButton.addActionListener ((e)->{ 
         unlock(); 
        }); 
        master.add(content); 
        master.revalidate(); 
    } 
    void lock() { 
        master.add(lockButton); 
        master.revalidate(); 
    } 
    void unlock() { 
        lockButton.remove(); 
        master.revalidate(); 
    } 
    
    +0

    変更内容を確認してください。 –

    0

    これはSimulatorでのみ発生します。実際のデバイスではすべて正常です。ごめんなさい。

    関連する問題