禁用EditTextPreference中的对话框,改为启动Intent

时间:2013-07-23 21:58:09

标签: android google-drive-api sharedpreferences preferenceactivity edittextpreference

我正在尝试使用Google Drive SDK编写应用。我想在PreferenceActivity中使用Preference对象,允许用户选择他们要将文件上传到的Google帐户。我一直在尝试使用EditTextPreference来启动帐户选择器意图。有用。但是,选择帐户后,将出现EditText对话框。是否可以禁用对话框?或者我是以错误的方式解决这个问题?

的preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
  <PreferenceCategory 
    android:title="@string/title_upload_category">
    <EditTextPreference
      android:title="@string/title_upload_acct"
      android:key="@string/key_upload_acct"/>
  </PreferenceCategory>
</PreferenceScreen>

PrefsFragment

public static class PrefsFragment extends PreferenceFragment{

@Override
public void onCreate(Bundle savedinstancestate) {
  GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(getActivity().getApplicationContext(), Arrays.asList(DriveScopes.DRIVE));
  EditTextPreference acctValue = (EditTextPreference)findPreference(getString(R.string.key_upload_acct));
  acctValue.setOnPreferenceClickListener(new OnPreferenceClickListener(){

    @Override
    public boolean onPreferenceClick(Preference preference) {
        startActivityForResult(credential.newChooseAccountIntent(), 1);
        return false;
    }               
  });
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && data != null){
      String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
      acctValue.setSummary(accountName);
      acctValue.setText(accountName);
    }
}

1 个答案:

答案 0 :(得分:2)

除了你应该使用Preference而不是EditTextPreference之外,你所做的一切都是正确的。然后,对话框将不会显示,并且在设置onPreferenceClickListener时,您将处理首选项的功能。