Android Switch问题

时间:2014-09-15 08:06:37

标签: java android

我目前在我的Android应用程序中使用一个开关作为我的设置类中的一些选项。但是,当我更改交换机的状态时,从false变为true,然后返回菜单,然后返回到设置活动,交换机的状态将恢复为默认值。是否存在基本上保存交换机状态的关键线,以便当用户返回时,状态是否相同?我不认为这个问题需要代码,但如果你觉得它有用,请告诉我,我会附上它。谢谢!

这是我的活动代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.speedytext.Options" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<Switch
    android:id="@+id/switch1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="46dp"
    android:layout_marginTop="48dp"
    android:layout_toRightOf="@+id/textView1"
    android:text="Switch" />

<Switch
    android:id="@+id/switch2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/switch1"
    android:layout_below="@+id/switch1"
    android:layout_marginTop="66dp"
    android:text="Switch" />

</RelativeLayout>

这是我的java代码:

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Switch;

public class Options extends ActionBarActivity {
private static Switch ding;
private Switch countdown;
public static boolean isDingChecked;
public static boolean isCountdownChecked;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_options);
    ding = (Switch) findViewById(R.id.switch1);
    ding.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // do something, the isChecked will be
            // true if the switch is in the On position
            isDingChecked = isChecked;
            System.out.println(isDingChecked);
            System.out.println(isDingChecked());
        }
    });
    countdown = (Switch) findViewById(R.id.switch2);
    countdown.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // do something, the isChecked will be
            // true if the switch is in the On position
            isCountdownChecked = isChecked;
            System.out.println(isCountDownChecked());
        }
    });
    isDingChecked = ding.isChecked();
    isCountdownChecked= countdown.isChecked();  

}

public static boolean isDingChecked()
{
    return isDingChecked;
}

public static boolean isCountDownChecked()
{
    return isCountdownChecked;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.options, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

2 个答案:

答案 0 :(得分:0)

onCreate()中,使用您存储的&#34;拨打setChecked(),然后检查&#34;将默认值设置为先前存储的值。

另外,考虑将设置存储到例如共享偏好。 static变量不会在应用程序重新启动时持续存在,并且通常会使代码难以维护。

答案 1 :(得分:0)

共享偏好类

public class AppPreferences {

    private SharedPreferences appSharedPrefs;
    private Editor prefsEditor;

    public AppPreferences(Context context, String Preferncename) {
        this.appSharedPrefs = context.getSharedPreferences(Preferncename,
                Activity.MODE_PRIVATE);
        this.prefsEditor = appSharedPrefs.edit();
    }

    /****
     * 
     * getdata() get the value from the preference
     * 
     * */
    public String getData(String key) {
        return appSharedPrefs.getString(key, "");
    }

    /****
     * 
     * SaveData() save the value to the preference
     * 
     * */
    public void SaveData(String text, String Tag) {
        prefsEditor.putString(Tag, text);
        prefsEditor.commit();

    }


    public void clear()
    {

         prefsEditor.clear();
         prefsEditor.commit();
    }

}

活动中共享偏好的使用

AppPreferences appPref;

appPref = new AppPreferences(getApplicationContext(), "PREFS");

保存状态

当切换状态改变时,将状态true或false保存到共享首选项

中的标记

您可以使用此行保存状态

appPref.SaveData("Value", "Tag");

因此对于已检查状态appPref.SaveData("true", "state");

,它将如此

appPref.SaveData("false", "state");表示未选中状态

在您的活动的oncreate中从共享首选项中获取值 使用

appPref.getData("state");
if(appPref.getData("state").equals("true"))
{
//set ur switch button to checked state
}
else if(appPref.getData("state").equals("false"))
{
//set ur switch button to unchecked state
}

然后检查结果字符串是true还是false 并相应地设置开关