2

我是新來的Android(與iOS背景),我想做到以下幾點: 我做了一個PreferenceFragment中,我詢問用戶他的憑據連接到我的Web服務。當我檢測到這些證書被我的服務器拒絕時,我想向我的用戶顯示一個對話框(模式),他可以在其中編輯他的偏好(證書)。Android應用程序:將PreferenceFragment顯示爲對話框?

我管理使用PreferenceActivity做到這一點。所以,當我點擊一個布頓,我執行下面的代碼:

Intent settingsActivity = new Intent(getActivity().getBaseContext(), PreferencesConnection.class); 
startActivity(settingsActivity); 

其中加載PreferenceActivity作爲對話與XML的ressource:

addPreferencesFromResource(R.xml.preferences_connection); 

但這貶值。我可以做同樣的事情,但是用碎片?我應該使用DialogFragment來顯示我的PreferenceFragment嗎?在DialogFragment中重建我的憑據會更容易嗎?我應該使用一個Activity而不是Fragment嗎?

回答

1

做一個老式的單頁設置,而不PreferenceHeaders屏幕,操作步驟如下:

在你的活動,調用設置屏幕(例如在onMenuItemSelected):

case R.id.menuSettings: 
     Intent settingsIntent = new Intent(this, SettingsActivity.class); 
     startActivityForResult(settingsIntent, GC.SETTINGS_ACTIVITY_ID); 
     break; 

在你的XML文件夾,創建一個老式的PreferenceScreen。 PreferenceCategory,ListPreference,CheckBoxPreference等,不要使用PreferenceHeaders

創建設置活動:

package com.mycompany.project1; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceFragment; 

public class SettingsActivity extends PreferenceActivity { 

    private final static String TAG = "SettingsAcitivity"; 

    public SettingsActivity() {} 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyLog.d(TAG, "onCreate"); 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new LocationFragment()).commit(); 
    } 

    public static class LocationFragment extends PreferenceFragment { 

     private String TAG = "LocationFragment"; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      MyLog.d(TAG, "onCreate"); 
      addPreferencesFromResource(R.xml.settings); 
     } 
    } 
} 

與設置活動的對話主題不相關聯。對於某些首選項類型(如單選按鈕),您會得到奇怪的結果。 (我嘗試了對話框並找不到編碼錯誤,當我使用標準活動主題而不是對話框主題時,一切正常,很明顯,全息對話框主題與設置定義相沖突

注意:我用startActivityforResult這樣我就可以重新初始化,改變特定設置值。

+0

看起來像它的偉大工程!但我對兼容性有點問題。請問它使用PreferenceFragment和PreferenceActivity?又是怎麼回事舊設備時工作的未來設備上? – NLemay

+0

我會接受你的答案,因爲它沒有回答這個問題非常好!但是我剛剛發現,很多人仍然對Android 2.3的,所以這種解決方案不會爲他們工作。你有一個想法如何使它作品? – NLemay

+1

我對2.x兼容性沒有幫助。截至1月份,40%的市場價格在15以上(ICS或更好),並且每季度增長率超過10%。我決定,我的新應用程序將被設置爲15分鐘一個和目標SDK簡單地說,我決定,我不想使用兼容性庫,添加額外的繪製文件夾,添加額外的佈局庫,寫我自己的下載管理器,或在活動和片段之間切換。寫入多個屏幕而不添加發布相關代碼已經足夠糟糕了。我的2.x應用程序沒有設置最大sdk並且運行良好,直到Jelly Bean。 –

相關問題