Android PreferenceFragment 从 Intent 获取结果

Android PreferenceFragment Get Result From Intent

我创建了一个 PreferenceFragment 来加载 xml 文件。在 xml 中有一个 intent 项启动图像选择器。 intent如下:

<PreferenceCategory
    android:title="Your Details">

    <Preference android:title="Your picture" >
        <intent android:action="android.intent.action.PICK"
            android:mimeType="image/*"
            />
    </Preference>

</PreferenceCategory>

这在显示选择器并允许我做出选择然后 return 到设置时效果很好。

我的问题是 - 如何找出选择了哪张图片(如果有)?

到目前为止我找到的所有示例似乎都只是在演示 intent 用于查看某些内容。用这个方法真的可以得到结果吗?

我没有使用 xml 创建意图,所以我使用事件侦听器来启动选择器。这是我的代码:

public class AccountFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener {

    static final int PICK_AVATAR_REQUEST_CODE = 1000;
    static final String AVATAR_KEY = "avatar_key";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.account_preferences);

        Preference avatar = findPreference(AVATAR_KEY);
        avatar.setOnPreferenceClickListener(this);
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        if(preference.getKey().equals(AVATAR_KEY)){
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, PICK_AVATAR_REQUEST_CODE);
            return true;
        }
        return false;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
//        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == PICK_AVATAR_REQUEST_CODE){
            /**
             * You have to call the getData or getDataString to get the images address
             */
            Log.i("CCC", data.getDataString());
        }
    }
}

而且当您创建 xml 文档时也会给出答案:

尽情享受吧。