Android PreferenceFragment从Intent获取结果

时间:2016-04-23 23:06:02

标签: android android-intent preferences

我创建了一个加载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>

这可以很好地显示选择器并允许我做出选择,然后返回设置。

我的问题是 - 如何找出选择的图像(如果有的话)?

到目前为止,我发现的所有示例似乎只是证明intent用于查看某些内容。实际上是否可以使用此方法获得结果?

1 个答案:

答案 0 :(得分:1)

我没有使用xml创建intent,所以我使用事件监听器来启动Picker。这是我的代码:

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时,文档会说明答案:

enter image description here

享受。