0

ラジオボタンとImageView、およびいくつかのパディングを含む5つの線形レイアウトがあります。ユーザーがラジオボタンが含まれているlinearlayoutのいずれかの部分をクリックした場合に、ラジオボタンがクリックされるようにしたいと思います。ラジオボタンの押された状態を取得するには、ontouchlistenerからタッチイベントをディスパッチすることがこれを行うための最良の方法だと思いました。

私の問題は、これをどのように実装するのが最善かということです。

これは、プレス状態を手動で設定しようとした1つの方法でした。

@Override
public boolean onTouch(View v, MotionEvent arg1) {
            //gets the index of which LinearLayout was touched
    int rb = lArray.indexOf(v);
            // uses this to identify the LinearLayout and RadioButton to control
    LinearLayout l = lArray.get(rb);
    RadioButton r = rbArray.get(rb);

    switch (arg1.getAction()) {
    case MotionEvent.ACTION_DOWN:
        Sy = arg1.getY();
        if (rb != -1) {
            r.setPressed(true);
        }
        break;
    case MotionEvent.ACTION_MOVE:
        My = arg1.getY();
        if (rb != -1 && Math.abs(Sy - My) > l.getHeight() / 2) {
            r.setPressed(false);
        }
        break;
    case MotionEvent.ACTION_UP:
        My = Sy = 0;
        if (rb != -1) {
            if (r.isPressed() && r.isEnabled()) {
                r.performClick();
            }
        }
        for (RadioButton b : rbArray) {
            b.setPressed(false);
        }
        break;
    }
    return true;
}
}

これはかなりうまく機能しますが、ユーザーが時々レイアウトから指をドラッグすると、onPressed状態が永続的に残るという問題が発生することがあります。

別の試みはこれでした:

@Override
public boolean onTouch(View v, MotionEvent event) {

    int rb = lArray.indexOf(v);
    RadioButton r = rbArray.get(rb);

        r.dispatchTouchEvent(event);

    return true;
            }

ただし、これは実際にクリックされた場合にのみonclickを呼び出しますが、ユーザーがレイアウト上で指をドラッグすると非アクティブになります。

これを行う方法はありますか?

4

2 に答える 2

1

線形レイアウトをクリックした場合、ラジオボタンを選択(または選択解除)しようとしていますか?レイアウトにクリックリスナーを設定してから、プログラムでラジオボタンを選択してみませんか?

于 2012-12-27T04:21:14.417 に答える
0

リニアレイアウトがオンになっている場合に使用し、オンタッチリスナーでラジオボタンをオンに設定し、オンクリックリスナーも追加します。両方が一緒に完璧に機能しました!

于 2013-01-02T04:54:33.177 に答える