0

アプリケーションが開くとすぐに設定フラグメントが表示されるように、MainActivity のビューを置き換えようとしています。APIレベル10のデバイスをサポートするためにandroid.support.v4.app.Fragmentライブラリを使用して同じタスクを達成しようとするまで、すべてが機能していました。 、次のエラーが表示されます:「FragmentTransaction 型のメソッド replace(int, Fragment) は引数 (int, SettingsFragment) には適用できません」私の設定フラグメントは Fragment を拡張する PreferenceFragment を拡張するため、これが問題になる理由はわかりません。

すべてのヘルプは大歓迎です。

public class MainActivity extends FragmentActivity {

@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {

    getSupportFragmentManager().beginTransaction()
    .replace(android.R.id.content, new SettingsFragment()) //SettingFragment is my class that manages the preferences
    .commit();

     Intent intent = new Intent(this, MainService.class);
     startService(intent); 
    return super.onCreateView(name, context, attrs);
}

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

次の授業:

public class SettingsFragment extends PreferenceFragment{

ListPreference notificationDrawerUnitOfMeasurePreference;
ListPreference notificationAreaUnitOfMeasurePreference;

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);

    notificationDrawerUnitOfMeasurePreference = (ListPreference) findPreference("pref_key_measurement_unit");
    notificationAreaUnitOfMeasurePreference = (ListPreference) findPreference("pref_key_measurement_unit_notification_area");

    notificationDrawerUnitOfMeasurePreference.setOnPreferenceChangeListener(notificationDrawerUnitOfMeasurePreferenceListener);
    notificationAreaUnitOfMeasurePreference.setOnPreferenceChangeListener(notificationAreaUnitOfMeasurePreferenceListener);

    notificationDrawerUnitOfMeasurePreference.setSummary(notificationDrawerUnitOfMeasurePreference.getValue().toString());
    notificationAreaUnitOfMeasurePreference.setSummary(notificationAreaUnitOfMeasurePreference.getValue().toString());
}

private OnPreferenceChangeListener notificationDrawerUnitOfMeasurePreferenceListener = new OnPreferenceChangeListener(){

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        ((ListPreference) preference).setValue(newValue.toString());
        preference.setSummary(newValue.toString());
        return false;
    }


};

private OnPreferenceChangeListener notificationAreaUnitOfMeasurePreferenceListener = new OnPreferenceChangeListener(){

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        ((ListPreference) preference).setValue(newValue.toString());
        preference.setSummary(newValue.toString());
        return false;
    }


};


}
4

2 に答える 2

3

問題は、SettingsFragment が、互換性ライブラリにない PreferenceFragment を拡張していることにあるようです。したがって、メソッド呼び出しが「引数 (int、SettingsFragment) には適用されない」と言っている場合は、support.v4.app.Fragment が必要であり、android.app.Fragment を指定していることを意味します。

残念ながら、今日まで Google では PreferenceFragment を互換性ライブラリに追加する動きはありませんでした。

PreferenceFragment と互換性ライブラリに関する非常に詳細な説明は、ここにあります。

于 2013-07-18T20:03:13.863 に答える