【问题标题】:How do I get android preferences to work?如何让 android 首选项工作?
【发布时间】:2011-01-23 22:06:38
【问题描述】:

对不起这些家伙。这一定就像我不得不单独问这个项目的第三个问题。 =(

我想要做的是使用首选项活动中的复选框切换单选按钮的可见性。

我的代码中没有错误,两个活动都运行良好,但是选中或取消选中复选框时可见性没有变化。

这是我的单选按钮活动

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import com.medialets.android.analytics.MMAnalyticsManager;

public class Temperature extends Activity {
MMAnalyticsManager mManager;
private EditText text;

public void onStart(Bundle savedInstanceState){
    super.onStart();
    getPrefs();
}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.temperature);
        text = (EditText)findViewById(R.id.EditText01);

mManager = MMAnalyticsManager.sharedInstance(this);
mManager.start("codeHere", "1.0",
    false);
}

@Override
public void onPause() {
super.onPause();

mManager.pause();
}

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

mManager.resume();
}

@Override
public void onDestroy() {
super.onDestroy();
mManager.stop();
}






    public void myClickHandler(View view){
        switch (view.getId()) {
        case R.id.Button01:
            RadioButton celsiustokelvinButton = (RadioButton) findViewById (R.id.RadioButton05);
            RadioButton celsiustofarenheitButton = (RadioButton) findViewById(R.id.RadioButton01);
            RadioButton farenheittocelsiusButton = (RadioButton) findViewById(R.id.RadioButton02);
            RadioButton farenheittokelvinButton = (RadioButton) findViewById(R.id.RadioButton06);
            RadioButton kelvintocelsiusButton = (RadioButton) findViewById (R.id.RadioButton03);
            RadioButton kelvintofarenheitButton=(RadioButton) findViewById (R.id.RadioButton04);
            float inputValue = Float.parseFloat(text.getText().toString());

              if (celsiustofarenheitButton.isChecked())  {
                text.setText(String
                        .valueOf(convertCelsiusToFarenheit(inputValue)));
            } if (farenheittocelsiusButton.isChecked()) {
                text.setText(String
                        .valueOf(convertFarenheitToCelsius(inputValue)));
            } if (celsiustokelvinButton.isChecked()) {
                text.setText(String
                        .valueOf(convertCelsiusToKelvin(inputValue)));
            } if (farenheittokelvinButton.isChecked()) {
                text.setText(String
                        .valueOf(convertFarenheitToKelvin(inputValue)));
            } if (kelvintocelsiusButton.isChecked()) {
                text.setText(String
                        .valueOf(convertKelvinToCelsius(inputValue)));
            } if (kelvintofarenheitButton.isChecked()) {
                text.setText(String
                        .valueOf(convertKelvinToFarenheit(inputValue)));
            }
            break;


        }}

    private float convertFarenheitToCelsius(float fahrenheit){
        return ((fahrenheit - 32) * 5 / 9);
    }
    private float convertCelsiusToFarenheit(float celsius){
        return ((celsius * 9) / 5) + 32;       
    }
    private double convertCelsiusToKelvin(float celsius){
        return celsius + 273.15;
    }
    private double convertFarenheitToKelvin(float farenheit){
        return ((farenheit-32)/(1.8));
    }
    private double convertKelvinToCelsius(float kelvin){
        return kelvin-273.1;
    }
    private double convertKelvinToFarenheit(float kelvin){
        return kelvin*1.8-459.67;
    }
    boolean CheckboxPreference;


    private void getPrefs() {
            // Get the xml/preferences.xml preferences
            SharedPreferences prefs = PreferenceManager
                            .getDefaultSharedPreferences(getBaseContext());
            CheckboxPreference = prefs.getBoolean("checkboxPref", true);
}

}

这是我的偏好活动

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;


public class Preferences extends PreferenceActivity {

private RadioButton btn01;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    btn01 = (RadioButton)findViewById(R.id.RadioButton01);
    Preference customPref = (Preference) findPreference("customPref");



    customPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){

        public boolean onPreferenceClick(Preference preference) {
            Toast.makeText(getBaseContext(),"The Custom Preference Has Been     Clicked",Toast.LENGTH_LONG).show();
            SharedPreferences customSharedPreference =     getSharedPreferences("myCutomSharedPrefs", Activity.MODE_PRIVATE);
            SharedPreferences.Editor editor = customSharedPreference.edit();
            editor.putString("myCustomPref","The preference has been clicked");
            editor.commit();

            CheckBox();

            return true;




        }
        private void CheckBox() {
            final CheckBox ThisCheckBox = (CheckBox) findViewById (R.id.checkboxPref);
            ThisCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
                @Override
               public void onCheckedChanged(CompoundButton compoundButton,boolean     test) {
                    if (ThisCheckBox.isChecked()){ 
                        btn01.setVisibility(View.VISIBLE);
                    } else {
                        btn01.setVisibility(View.GONE);
                    }
                }
            });
        };
    });

}}

抱歉,里面还有其他东西,比如分析插件

任何人都知道为什么这不起作用

(只是附注。查看 logcat 时,单击复选框未返回任何结果)

编辑:好的,我刚刚按照建议修改了我的代码,但恐怕这些偏好仍然不会影响任何事情。有人有什么想法吗?? =(

【问题讨论】:

  • 说到旁注,当您说“查看 logcat 时,单击复选框未返回任何结果”时,我假设您正在 Eclipse 下查看它。你不必。我更喜欢使用“adb logcat -v time”查看它以更全面地了解正在发生的事情,然后过滤或保存文件并使用 Emacs 查看以确保我可以看到可能相关的所有内容。您可能想尝试一下,看看是否能获得更多信息的 logcat 输出。顺便说一句:您将需要更多 Log.d()、Log.w() 等函数调用,这些函数调用散布在上面显示的代码中,以找出它为什么不起作用。

标签: android checkbox android-activity radio-button preferences


【解决方案1】:

它不起作用,因为为了可见性,您应该使用的值是(reference)

 0 = VISIBLE
 4 = INVISIBLE
 8 = GONE

【讨论】:

  • 是的,对于那些你可能应该只使用常量来使代码更容易理解的人。 View.VISIBLE、View.INVISIBLE 等
  • 非常感谢,但这似乎只是答案的一部分,因为偏好仍然不会影响单选按钮。
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多