2

私は Transfuse ( http://androidtransfuse.org/ ) で遊んでいて、現在はSharedPreferences. ドキュメントでは、これは非常に簡単に見えます。

@Activity
public class Example{
    @Inject @Preference(value = "favorite_color", default = "green")
    String favColor;
}

ただし、私が理解しているように、SharedPreferencesキーだけでなく名前で取得されます。SharedPreferencesでは、アクセスしようとしているファイルの名前を Transfuse はどのようにして知るのでしょうか?

私はこのようなことを無駄にしようとしました:

@Activity
public class MainActivity{
    public static final String PREF_NAME = "pref_name";

    @Inject
    android.app.Activity mActivity;

    @Inject @Preference(value = PREF_NAME, defaultValue = "")
    String mPreference;

    @Inject @View(R.id.preference)
    EditText mPreferenceEditText;

    @RegisterListener(R.id.button_2)
    android.view.View.OnClickListener mSavePrefListener = new android.view.View.OnClickListener() {
        @Override
        public void onClick(android.view.View v) {
            String val = mPreferenceEditText.getText().toString();
            mActivity.getSharedPreferences("the_shared_prefs", Context.MODE_PRIVATE)
                .edit()
                .putString(PREF_NAME, val)
                .apply();
        }
    };

    @OnResume
    private void displayPrefText(){
        mPreferenceEditText.setText(mPreference);
    }
}

ご協力いただきありがとうございます!

4

1 に答える 1

2

@Preferenceインジェクションは、( PreferenceManager.getDefaultSharedPreferences()CommonsWare が提案したように) メソッドを使用してSharedPreferencesオブジェクトを検索します。これは、デフォルトの設定を直接使用するのに便利です。あなたの例は基本的に次の注入を生成します:

delegate.favColor = activity.getDefaultSharedPreferences()
                        .getString("favorite_color", "green");

Provider必要に応じて、 or@Providesメソッドと修飾子を介して特定の SharedPreferences オブジェクトを注入するように Transfuse を設定できます。

@TransfuseModule
class Module{
    @Provides @Named("the_shared_prefs")
    public SharedPreferences build(Activity activity){
        return activity.getSharedPreferences("the_shared_prefs", Context.MODE_PRIVATE)
    }
}

次に、次のようにアクティビティに挿入できます。

@Activity
public class MainActivity{
    public static final String PREF_NAME = "pref_name";

    @Inject @Named("the_shared_prefs")
    SharedPreferences theSharedPreferences;

    @Inject @View(R.id.preference)
    EditText mPreferenceEditText;

    @RegisterListener(R.id.button_2)
    android.view.View.OnClickListener mSavePrefListener = new android.view.View.OnClickListener() {
        @Override
        public void onClick(android.view.View v) {
            String val = mPreferenceEditText.getText().toString();
            theSharedPreferences
                .edit()
                .putString(PREF_NAME, val)
                .apply();
        }
    };
}

インジェクションを拡張して、@Preferenceデフォルト以外の共有設定を指定できるようにする場合があります。これは役に立ちますか?

于 2014-07-17T17:50:59.770 に答える