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。 –

相关问题