3

Android アプリケーションで、キーパッドのように機能するフラグメントを作成したいと考えています。9 つのキーすべてに対してonClickを処理する関数が1 つあります。とにかく、これらの 9 つのキーすべてに対してonLongClickを処理する関数を 1 つだけ作成する必要があるかどうかを知りたいです。

ここにレイアウトxmlがあります:

   <Button
    android:id="@id/testButton"
    android:layout_width="70dp"
    android:layout_height="55dp"
    android:layout_margin="2dp"
    android:background="@drawable/keypad_round_button"
    android:text="1"
    android:textColor="@color/black_1" 
    android:onClick="keypadSetNote"
    android:longClickable="true"/>
<Button
    android:id="@id/testButton"
    android:layout_width="70dp"
    android:layout_height="55dp"
    android:layout_margin="2dp"
    android:background="@drawable/keypad_round_button"
    android:text="2"
    android:longClickable="true"
    android:textColor="@color/black_1"
    android:onClick="keypadSetNote"
     />

OnlongClick リスナーは次のとおりです。

        Button button = (Button) findViewById(R.id.testButton);
    button.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            Button clickedButton = (Button) v;
            String buttonText = clickedButton.getText().toString();
            Log.v(TAG, "button long pressed --> " + buttonText);
            return true;
        }
    });

1 つの関数ですべてのonLongClickアクションを処理するために、すべてのキーに同じ ID を与えましたが、最初のキーに対してのみ機能します。Androidでグループボタンのようなものを定義する方法はありますか??? または、それらすべての OnLongClick リスナーを個別に作成する必要がありますか???

4

3 に答える 3

6

無名関数の代わりに名前付き関数を作成するだけです:

View.OnLongClickListener listener = new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        Button clickedButton = (Button) v;
        String buttonText = clickedButton.getText().toString();
        Log.v(TAG, "button long pressed --> " + buttonText);
        return true;
    }
};

button1.setOnLongClickListener(listener);
button2.setOnLongClickListener(listener);
button3.setOnLongClickListener(listener);

そして、あなたはそれを尋ねていませんが、警告する必要があります: @AndyRes が言うように、ボタンには異なる ID が必要です。ID が同じであっても、ID でボタンを取得してもすべてのボタンが返されるわけではなく、その ID を持つ最初のボタンのみが返されます。これは、最初のボタンでのみ機能するためです。

于 2013-07-03T15:30:24.600 に答える
0

ボタンが LinearLayout、RelativeLayour、またはその他にある場合。そして、あなたは非常に多くのボタンを持っています。

    View.OnLongClickListener listener = new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            Log.d("ID", ""+v.getId());
            switch (v.getId())
            {
            case R.id.button1:
                //do something for button1
                break;
            case R.id.button2:
                //do something for button2
                break;
            ...
            }
            return true;
        }
    };


    LinearLayout layout=(LinearLayout)findViewById(R.id.IdOfLinearLayout);
    for(int i=0;i<layout.getChildCount();i++){
          layout.getChildAt(i).setOnLongClickListener(listener);
      }

たとえば、xmlファイル...

<LinearLayout 
    android:id=@+id/IdOfLinearLayout"....>
    <Button
       android:id="@+id/button1"
       android:layout_width=...
       android:layout_height=...
    .../>
    <Button
       android:id="@+id/button2"
       ... />
     ....
    <Button
       android:id="@+id/buttonN"
       .../>
</LinearLayout>
于 2013-11-03T12:28:40.037 に答える