4

次のように、独自のカスタム DialogPreference サブクラスを実装しています。

public class MyCustomPreference extends DialogPreference
{
    private static final String androidns = "http://schemas.android.com/apk/res/android";

    private String mDialogMsg;

    public MyCustomPreference(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        mDialogMsg = attrs.getAttributeValue(androidns, "dialogMessage");

        ...
    }

    ...
}

ご覧のとおり、dialogMessageXML 属性を取得してメンバー変数に保存しますmDialogMsg

私の問題は次dialogMessageのとおりです。現在のコードでは、 XML 属性を XML の文字列リソース ID として指定することはできません。

言い換えれば、これは機能します:

android:dialogMessage="Hello world!"

しかし、これはしません:

android:dialogMessage="@string/hello_world"

XML でリソース ID として指定すると、リソース IDmDialogMsg文字列リソース自体ではなくに保存されます。今、私はできることを知っています:

context.getString(attrs.getAttributeValue(androidns, "dialogMessage"))

しかし、その場合、ユーザーは XML に通常の文字列 (つまり、非リソース ID) を入力できなくなります。ユーザーに両方を実行するオプションを提供したいと思います。どうすればいいですか?

4

3 に答える 3

7
int resId = attrs.getAttributeResourceValue(androidns, "dialogMessage", 0);
if(resId != 0){
    mDialogMsg = getContext().getResources().getString(resId);
} else{
    mDialogMsg = attrs.getAttributeValue(androidns, "dialogMessage");
}
于 2012-11-29T04:08:01.930 に答える
0

問題を完全に理解しているかどうかはわかりませんが、理解している場合、文字列リソースは実際には整数値として保存されます。文字列値を取得するために、アプリケーションで次の関数を作成しました

public static String getToastString(int res, Context c)
    {
        String toast = "";
        toast = c.getResources().getString(res);

        return toast;
    }

次に、リソースとコンテキストを渡して値を取得できます

于 2012-11-29T03:57:01.633 に答える