0

私のアプリのいくつかのクラスから、を使用せずに文字列のグローバル値を取得したいと思いますContext。この変数をApplicationクラスSharedPreferencesまたはで宣言する場合は、値の取得/設定にStrings.xml使用する必要があります。Context

この投稿から理解できるように、シングルトンの使用は良い習慣ではありません。を使用せずにグローバル変数を使用するための良い方法はありますか?context

4

2 に答える 2

0

グローバルクラスを作成するか、「意味のある」場所に文字列を格納します。たとえば、Shoesクラスがある場合は、次のように実行できます。

public class Shoes {

    public static class BRAND {
        public static final String NIKE = "nike";
        public static final String REBOK = "rebok";
        public static final String ADDIDAS = "addidas";
    }

    private String brand;

    public Shoes() {}

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getBrand() {
        return this.brand;
    }
}

今、あなたはこれを行うことができます:

public static void main(String[] args) {

    Shoes myShoes = new Shoes();
    myShoes.setBrand(Shoes.BRAND.NIKE);
}

Androidにはこのようなものがたくさんあります。代わりに列挙型を使用するとさらに良いでしょう。お役に立てれば。

アップデート

セッターとゲッターを使用したい場合は、2つの解決策があります。

  1. 最初に必要なのはオブジェクトのインスタンスであり、必要なのは単一のインスタンスのみであるため、シングルトンデザインパターンが必要になります。本当に正しく同期し、デザインが理にかなっている場合、それらは非常に優れていて便利です。あなたの状況では、私はそれが仕事の価値があるとは思わない。
  2. 静的初期化子と静的メソッドを利用できます。次のように、最後の宣言を削除して、文字列を使用して必要な操作を行うことができます。

    public class Shoes {
    
        public static class BRAND {
            public static String NIKE;
            public static String REBOK;
            public static String ADDIDAS;
    
            static {
                NIKE = "nike";
                REBOK = "rebok";
                ADDIDAS = "addidas";
            }
        }
    
        private String brand;
    
        public Shoes() {}
    
        public void setBrand(String brand) {
            this.brand = brand;
        }
    
        public String getBrand() {
            return this.brand;
        }
    }
    

または、適切なカプセル化手法を使用して、これを実行します。

public class Shoes {

    public static class BRAND {
        private static String NIKE;
        private static String REBOK;
        private static String ADDIDAS;

        static {
            NIKE = "nike";
            REBOK = "rebok";
            ADDIDAS = "addidas";
        }

        public static String getNIKE() {
            return NIKE;
        }

        public static void setNIKE(String name) {
            NIKE = name;
        }

        public static String getREBOK() {
            return REBOK;
        }

        public static void setREBOK(String name) {
            REBOK = name;
        }

        public static String getADDIDAS() {
            return ADDIDAS;
        }

        public static void setADDIDAS(String name) {
            ADDIDAS = name;
        }
    }

    private String brand;

    public Shoes() {}

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getBrand() {
        return this.brand;
    }
}

ただし、注意する必要があります。コンテキストを取得できないためにこれを実行している場合は、何かが不足しています。コンテキストはどこからでも取得できます。システムによってインスタンス化されたオブジェクトには、パラメーターとしてコンテキストが与えられます。独自のカスタムオブジェクトがある場合は、オブジェクト自体(this)を使用してApplicationContextをパラメーターまたはクラスとして渡すことができます。

于 2012-05-06T23:29:18.047 に答える
0

値をstrings.xmlファイルに保存します。そして、このように呼びます。

 String yourString = Context.getResources().getString(R.string.your_string);
于 2012-05-06T23:30:51.753 に答える