2

私のAndroidアプリには、スイッチウィジェットがあり、oncheckchangeリスナーを次のように設定しています

            main.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                    if (no_internet()) {
                          // cancel click...
                          return; 
                    }
                    if (image.getApproved()) {
                        if (arg1) {
                            for(FishImage image : imagestoshow) {
                                image.setIsMain(false);
                            }
                        }
                        image.setIsMain(arg1);
                    }
                }
            });

基本的にインターネットがあれば何とかしますが、なければスイッチへの変更をキャンセルしたいです。現時点では、スイッチの状態が変更されます。コードで状態を変更しようとしても、このコードはアンドロイドが状態を変更する前に発生するため、効果はありません。

スイッチをキャンセルする方法が必要なので、それを行うと、クリックしなかったかのようになります。

4

1 に答える 1

5

代わりにsetOnClickListener(View.OnClickListener)、コールバックをキャッチしonClick(View)ます。次にtoggle()、クリックでフォロースルーしたくない場合は、スイッチだけです。

内部onCheckedChanged(CompoundButton, boolean)で呼び出すと無限ループになるため、コールバックは使用しないでください。toggle()

main.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View clickedView) {
        // Cast to get access to Switch methods
        Switch switchView = (Switch) clickedView; 

        if (no_internet()) {
            switchView.toggle();
            return; 
        }
        if (image.getApproved()) {
            if (switchView.isChecked()) {
                for(FishImage image : imagestoshow) {
                    image.setIsMain(false);
                }
            }
            image.setIsMain(switchView.isChecked());
        }
    }
});
于 2015-01-06T17:21:28.687 に答える