2013-02-25 26 views
5

enter image description herecó thể không nhận được sự PreferenceFragment làm việc (lỗi Biên soạn)

Tôi nhận được thông báo lỗi khi tôi cố gắng để biên dịch dự án của tôi: "Phương pháp này thêm (int, Fragment) trong các loại FragmentTransaction không áp dụng cho các đối số (int, FragmentPreferences) ". Theo như tôi biết, PreferenceFragment là một Fragment? Tôi đang phát triển cho android 4.0 nhưng tôi phải sử dụng thư viện android-support-v4 vì dự án của tôi cũng bao gồm cả ViewPager. Tôi đã tìm thấy ví dụ này tại http://developer.android.com/guide/topics/ui/settings.html#Fragment:

// Display the fragment as the main content. 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment()) 
       .commit(); 

Nhưng tôi không thể làm cho nó hoạt động.

Mã của tôi:

case R.id.menu_settings: 
    FragmentPreferences prefs = new FragmentPreferences(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(android.R.id.content, prefs); 
    ft.commit(); 
    break; 

FragmentPreferences:

public class FragmentPreferences extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 

} 

Trả lời

16

Đó là vì PreferenceFragment kéo dài android.app.Fragment, chứ không phải là android.support.v4.app.Fragment mà mong đợi là android.support.v4.app.FragmentTransaction.

Hiện chưa có cổng chính thức của PreferenceFragment vào thư viện hỗ trợ. Tuy nhiên, bạn có thể sử dụng các thư viện như UnifiedPreferences để lấp đầy khoảng trống này.

1

Kiểm tra import báo cáo ở phía trên cùng của mã của bạn. Có thể một trong các lớp bạn đang sử dụng là từ support trong khi lớp kia thì không.

+1

Nếu tôi thay đổi bất kỳ lớp nào trong số đó, nó sẽ làm hỏng người xem của tôi. – user1888162

+0

Như ianhanniballake đề xuất ở trên, bạn sẽ phải tìm kiếm giải pháp thay thế. Tôi sẽ chỉ sử dụng một 'PreferenceActivity' trong khi chờ đợi nếu bạn không thực sự cần mảnh vỡ. –

0

Dưới đây là backport không chính thức của PreferenceFragment đến thư viện hỗ trợ. Cập nhật lần cuối vào tháng 2 năm 2015 & tương thích với các thiết bị lollipop. android-support-v4-preferencefragment

import android.support.v4.preference.PreferenceFragment; 
+0

theo quan điểm của tôi, giải pháp tồi! – Mateus

+0

quan tâm giải thích tại sao đó là giải pháp tồi? –

+0

Giải pháp mà tôi đã tìm kiếm trong một thời gian dài. –

-1

Chỉ cần cập nhật nhanh: hiện nay có Preferences trong hỗ trợ Librray:

compile "com.android.support:preference-v7:$supportVersion" 

Hãy vui vẻ.

Các vấn đề liên quan