0

api>=14 の場合は SwitchPreference sToggle を使用し、api<14 の場合は CheckBoxPreference chToggle を使用したい

私のコードで例外が発生します

public class SettingsActivity extends PreferenceActivity {
SwitchPreference sToggle;
CheckBoxPreference chToggle;

...

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

...

if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
        sToggle = new CheckBoxPreference(this);
        sToggle.setTitle("One");
        targetCategory.addPreference(sToggle);
    } else {
        chToggle = new CheckBoxPreference(this);
        chToggle.setTitle("Two");
        targetCategory.addPreference(chToggle);
    }

私を助けてくれますか?)

4

2 に答える 2

0

SwitchPreference sToggle;APIレベル<14でもコードによって定義されています。それは私が想定する例外です。

クラスはこれらの API レベルにはまったく存在しないため、まったく使用しないでください。コードでそれについて言及することすらありません。または技術的には、そのクラスをロードすることは何もしないでください。

ただし、sToggle を既存のスーパータイプの変数として宣言することは許可されています。

public class SettingsActivity extends PreferenceActivity {
    Preference sToggle;

次に、SwitchPreference を使用するコードを、下位の API レベルに読み込まれていない別のクラスに移動します。例えば

 class ToggleNew {
      public static Preference getToggle() {
          return new SwitchPreference();
      }
 }
 class ToggleOld {
      public static Preference getToggle() {
          return new CheckboxPreference();
      }
 }

元のクラスは、必要なバージョンを動的に使用/ロードできるようになりました。

Preference p;
if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
        p = ToggleNew.getToggle();
} else {
        p = ToggleOld.getToggle();
}

それを少し調整する必要がありますが、これは、一部の API レベルでクラスを使用し、他のレベルでは使用しない一般的な方法です。

于 2013-07-02T12:35:09.070 に答える
0

SwitchPreference の代わりに SwitchPreferenceCompat を使用します。

于 2016-12-31T21:02:14.267 に答える