0

我有一个项目有两个活动(MainActivity 和 CustomPreferenceActivity)。我有一些代码,当单击按钮时,它会启动 CustomPreferenceActivity。根据对 CustomPreferenceActivity 所做的选择,TextView 的字体颜色将发生变化。但是,我不喜欢我对问题的解决方案(绑定到 onResume 以更新 UI)。还有其他建议吗?提前致谢。

主要活动

public class MainActivity extends Activity {

private int colorResId;
private int fontSize;
private OnClickListener buttonListener = getButtonListener();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button)findViewById(R.id.preferenceButton);
    button.setOnClickListener(buttonListener);


}

@Override
public void onResume()
{
    super.onResume();
    updateUiBasedOnPreferences();
}

private void updateUiBasedOnPreferences()
{
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    String colorPreference = pref.getString("colorPreference", "default");

    colorResId = convertStringToColorResId(colorPreference);
    fontSize = pref.getInt("fontSize", 24);

    TextView textView = (TextView)findViewById(R.id.textView);
    textView.setTextColor(colorResId);
    textView.setTextSize(fontSize);

}
private int convertStringToColorResId(String input)
{
    if (input.equals("GREEN"))
        return Color.GREEN;
    else if (input.equals("RED"))
        return Color.RED;
    else if (input.equals("BLUE"))
        return Color.BLUE;
    else
        return Color.BLACK;
}

private OnClickListener getButtonListener()
{
    return new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), CustomPreferencesActivity.class);
            startActivity(intent);
        }
    };
}

自定义首选项活动

public class CustomPreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener 
{

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.preferences);
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    pref.registerOnSharedPreferenceChangeListener(this);
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
    Preference pref = findPreference(key);
    pref.setSummary(sharedPreferences.getString(key, ""));
}
}
4

2 回答 2

0

您可以通过使用而不是仅在您的主要活动中使用,让您的偏好活动将Intent包含颜色信息的内容传递回您的主要活动。然后可以在 期间读取意图数据,这会在首选项活动完成时自动调用。代码如下所示:startActivityForResult(Intent, int)startActivity(Intent)onActivityResult(int, int, Intent)

public class MainActivity extends Activity {

    // ...

    public static final int TEXT_COLOR_REQUEST_CODE = 1;

    private OnClickListener getButtonListener() {
        return new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), CustomPreferencesActivity.class);
                startActivityForResult (intent, TEXT_COLOR_REQUEST_CODE);
            }
        };
    }

    @Override
    protected void onActivityResult (int requestCode, int resultCode, Intent data) {
        if ((requestCode == TEXT_COLOR_REQUEST_CODE) && (resultCode == RESULT_OK)) {
            // Extract color information from data and update UI.
            updateUI(data);
        }
    }
}

当您的偏好活动中的颜色发生变化时,您将添加以下代码:

Intent intent = new Intent();
intent.putExtra("key", colorData);
setResult(RESULT_OK, colorData);
于 2013-07-19T21:40:22.333 回答
0

你可以实现一个单例类和一个监听器接口来实现这个技巧。

  1. OnPreferenceChangeListener,MainActivity实现这个接口更新UI

  2. OnPreferenceChangeHeler,持有一个OnPreferenceChangeListener的引用(即MainActivity)

  3. 更新时 OnPreferenceChangeHeler 的 CustomPreferencesActivity 调用方法

于 2013-07-19T17:32:07.043 回答