@Garret Wilson ขอบคุณมาก! ในฐานะที่เป็นการเข้ารหัส noob สำหรับ Android ฉันได้รับการติดอยู่กับปัญหาความเข้ากันไม่ได้ของการตั้งค่าเป็นเวลาหลายชั่วโมงและฉันพบว่ามันน่าผิดหวังมากที่พวกเขาเลิกใช้วิธี / แนวทางบางอย่างสำหรับคนใหม่ที่ 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) ด้วยความสำเร็จ
ทำไมรหัสของฉันดูเส็งเคร็ง:
ฉันเป็น noob สำหรับ Android ที่เข้ารหัสและฉันไม่ใช่แฟน java ที่ยิ่งใหญ่ที่สุด
เพื่อหลีกเลี่ยงคำเตือนที่เลิกใช้และบังคับให้ Eclipse ให้ฉันรวบรวมฉันต้องหันไปใช้คำอธิบายประกอบ แต่สิ่งเหล่านี้ดูเหมือนจะมีผลกับคลาสหรือวิธีการเท่านั้นดังนั้นฉันจึงต้องย้ายโค้ดไปยังสองวิธีใหม่เพื่อใช้ประโยชน์จากสิ่งนี้
ฉันไม่ต้องการเขียนรหัสทรัพยากร xml ของฉันสองครั้งทุกครั้งที่ฉันคัดลอกและวางคลาสสำหรับ PreferenceActivity ใหม่ดังนั้นฉันจึงสร้างตัวแปรใหม่เพื่อเก็บค่านี้
ฉันหวังว่านี่จะเป็นประโยชน์กับคนอื่น
PS: ขอโทษสำหรับมุมมองความเห็นของฉัน แต่เมื่อคุณมาใหม่และหาอุปสรรคดังกล่าวคุณไม่สามารถช่วยได้ แต่ที่จะได้รับความผิดหวัง!