@Garret Wilson 정말 감사합니다! 안드로이드 코딩에 대한 멍청한 듯이, 나는 많은 시간 동안 기본 설정 비 호환성 문제에 갇혀 있었고, 이전 API에서 지원하지 않는 새로운 메소드에 대한 일부 메소드 / 접근 방식을 사용하지 않기 때문에 실망했습니다. 다양한 기기에서 앱이 작동하도록 모든 종류의 해결 방법을 사용해야합니다. 정말 실망 스럽습니다!
클래스는 훌륭합니다. 이전과 같은 환경 설정으로 새로운 API에서 계속 작업 할 수 있지만 이전 버전과 호환되지는 않습니다. 광범위한 장치에 도달하려고 노력하고 있기 때문에 API 11 이전 장치와 최신 API에서 작동하도록하기 위해 약간의 노력을 기울였습니다.
import android.annotation.TargetApi;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
public class MyPrefsActivity extends PreferenceActivity
{
private static int prefs=R.xml.myprefs;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try {
getClass().getMethod("getFragmentManager");
AddResourceApi11AndGreater();
} catch (NoSuchMethodException e) { //Api < 11
AddResourceApiLessThan11();
}
}
@SuppressWarnings("deprecation")
protected void AddResourceApiLessThan11()
{
addPreferencesFromResource(prefs);
}
@TargetApi(11)
protected void AddResourceApi11AndGreater()
{
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PF()).commit();
}
@TargetApi(11)
public static class PF extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(MyPrefsActivity.prefs); //outer class
// private members seem to be visible for inner class, and
// making it static made things so much easier
}
}
}
두 개의 에뮬레이터 (2.2 및 4.2)에서 성공적으로 테스트되었습니다.
왜 내 코드가 그렇게 엉망인 것입니까?
나는 안드로이드 코딩의 멍청한 놈이며, 가장 큰 자바 팬이 아닙니다.
더 이상 사용되지 않는 경고를 피하고 Eclipse가 컴파일하도록 강제하기 위해 주석에 의존해야했지만 클래스 또는 메소드에만 영향을 미치는 것처럼 보이므로 코드를 두 가지 새로운 메소드로 옮겨야했습니다.
새 PreferenceActivity에 대한 클래스를 복사하여 붙여 넣을 때마다 xml 리소스 ID를 두 번 쓰지 않고 싶지 않으므로이 값을 저장하기 위해 새 변수를 만들었습니다.
나는 이것이 다른 누군가에게 유용하기를 바랍니다.
추신 : 저의 의견에 대해 죄송하지만, 새로 와서 그러한 장애를 발견하면 도와 드릴 수는 없습니다.