1

我正在尝试更改我的 Android 应用程序的背景颜色(我是 ADK 的新手)。
我在另一个问题中读到,我必须在我的主布局(RelativeLayout)和应用程序中的所有其他视图之间使用另一个 LinearLayout,并改为更改它的颜色。我想要一个偏好来指示背景更改为哪种颜色,以及偏好活动和一切运行顺利;但是,当我将 R.id.bg(bg是 LinearLayout 的 ID)传递给 findViewById() 时,每当我尝试更改背景颜色时,它都会返回 null 并抛出 NPE。

编辑:你知道吗,这是整个班级的来源。:P

public class Preferences extends PreferenceActivity implements
    OnSharedPreferenceChangeListener {

    SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        prefs.registerOnSharedPreferenceChangeListener(this);

    }

    private void showToast(CharSequence text) {
        Context context = getApplicationContext();
        showToast(context, text, 3000);
    }

    private void showToast(Context context, CharSequence text, int duration) {
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {

        if (key.equalsIgnoreCase("list_color")) {

            LinearLayout bg = (LinearLayout) findViewById(R.id.bg);
            String color = sharedPreferences.getString("list_color", "White");

            if (bg == null) {

                showToast("Unable to change background color");

            } else {

                if (color.equals("White")) {
                    bg.setBackgroundColor(android.R.color.white);
                    showToast("Background color set to white");
                } else if (color.equals("Black")) {
                    bg.setBackgroundColor(android.R.color.black);
                    showToast("Background color set to black");
                }

            } // end NP test

        }

    }
}
4

2 回答 2

1

您不能View以传统方式直接从首选项中获取。

你能做的最接近的是Preference使用findPreference()

Preference myPreference = findPreference("key");

如果你需要View(我假设你这样做),你可以试试这个:

View v = myPreference.getView(null, null);

这应该返回View代表Preference.

于 2012-11-25T00:59:42.573 回答
-1

显示您的 onCreate 方法。也许您忘记添加setContentView(R.layout.your_layout);

super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);

或导入不正确的 R 文件。

于 2012-11-24T23:41:19.190 回答