Android PreferenceFragment 从 Intent 获取结果

标签 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。用这种方法真的可以得到结果吗?

最佳答案

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

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

享受吧。

关于Android PreferenceFragment 从 Intent 获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36817454/

相关文章:

java - 尝试在 fragment 选项卡中添加 map 时出错

java - Intent.ACTION_GET_CONTENT 和 Intent.ACTION_PICK 之间的区别

android: 首选项 xml 中的可见性属性不起作用? (安卓 2.3)

java - 无法从 Java 将 boolean 首选项存储到 Windows 10 注册表,而整数和字符串可以正确存储

java - 按下按钮时未调用 Intent

android - 扩展基础 EditTextPreference 和加密/解密

android - 错误膨胀类 com.google.android.youtube.player.YouTubePlayerView

java - 为什么我的 onResume 被调用了两次?

php - JSON 数组中的最后一个逗号到 android

android - 如何使用getCropAndSetWallpaperIntent?