0

突然、奇妙な行動に遭遇しました。ビューを完全に動的に作成します。基本的に、db からデータを取得します。これにより、どのように、どの UI を生成する必要があるかがわかります。

ボタン、ラベルなどのコントロールを取得します。ここで、2 つのボタンを動的に作成し、このロジックで独自の onClick ハンドラーを割り当てます。

            this.setOnClickListener(new OnClickListener() {                    
                  @Override
                  public void onClick(View v) {                       
                      GenButtonClick(v);
                  }
                });

これは簡単です。クリックは、最初のボタンに対して適切に処理されます。最初のコントロールは、ランタイムによって何らかの形で左上にフォーカスを受け取る必要があります。しかし、それは奇妙な焦点です。他のボタンをクリックすると、イベント ハンドラーを処理するために 2 回クリックする必要があります。最初のボタンに戻るときも、2 回クリックする必要があります。

どの行がこの動作を引き起こしているかがわかりました。

    this.setClickable(true);        
    this.setFocusable(true);            
    this.setFocusableInTouchMode(true);  // <-- this line.

テスト目的でこの行を書き直しました。私は今別の問題を抱えています。その後、フォーカスされたコントロールを取得できません。しかし、フォーカスされたコントロールの名前が必要です。今何ができますか?onClickListener に入力する View タイプの fragmentactivity に属性を作成する必要がありますか? または、内部メカニズムはありますか?ユーザーは 2 回クリックする必要があるため、setFocusableInTouchMode(true) を使用しないでください。ボタンが1回クリックされた後にonClickハンドラーが処理されるため、 requestFocus() は役に立ちません。この場合、どうすればよいですか?

これを解決するために、OnTouchEvent を試してみました。そして、それは機能します。ただし、これが正しいアプローチなのか、それとも最善の準備なのかはわかりません。シンプルな onClick ハンドラーを使用してクリックされたボタンのフォーカスを受け取り、onClick イベントハンドラーを 1 つの方法で処理するための「簡単な」方法はありませんか?

4

0 に答える 0