Issue
I am trying to change theme of an application dynamically. I have two activities, one is main activity and another is setting activity.
In settings activity I am changing theme from color picker dialog when color is selected, theme is changed. But theme is only getting change for the settings activity and not on main activity.
I tried to send color values from settings activity to main activity , but the app dose not get start up. It's showing only blank screen.
When I did debug, I came to know that its getting stuck on first if(n==0){}
, and the loop goes on it dose not end.
Not getting what's wrong.
Also may be main activity dose not get refreshed when I come from settings activity. How can I refresh main activity?
Settings Activity:
public class Settings extends AppCompatActivity {
int no;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final int color = 0;
public static final int color_2 = 0;
public static final int color_3 = 0;
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
Theme.onActivityCreateSetTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
final ColorPickerDialog colorPickerDialog = new ColorPickerDialog();
colorPickerDialog.initialize(R.string.dialog_title, new int[]{Color.CYAN, Color.LTGRAY, Color.BLACK, Color.BLUE, Color.GREEN, Color.MAGENTA, Color.RED, Color.GRAY, Color.YELLOW}, Color.YELLOW, 3, 2);
colorPickerDialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener() {
@Override
public void onColorSelected(int color) {
if (color == Color.CYAN) {
Theme.changeToTheme(Settings.this, Theme.THEME_DEFAULT);
no = 0;
}
else if (color == Color.LTGRAY)
{
Theme.changeToTheme(Settings.this, Theme.THEME_WHITE);
no = 1;
}
else if (color == Color.BLACK) {
Theme.changeToTheme(Settings.this,Theme.THEME_BLUE);
no = 3;
}
Toast.makeText(Settings.this, "selectedColor : " + color, Toast.LENGTH_SHORT).show();
}
});
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt("color",no);
// editor.putInt("color_2",no);
// editor.putInt("color_3",no);
editor.commit();
LinearLayout theme = (LinearLayout)findViewById(R.id.theme);
theme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
colorPickerDialog.show(getSupportFragmentManager(), "colorpicker");
}
});
}
}
Theme:
public class Theme {
private static int sTheme;
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
/** * Set the theme of the Activity, and restart it by creating a new Activity of the same type. */
public static void changeToTheme(Activity activity, int theme) {
sTheme = theme;
activity.finish();
Intent i = new Intent(activity,activity.getClass());
activity.startActivity(i);
}
/** Set the theme of the activity, according to the configuration. */
public static void onActivityCreateSetTheme(Activity activity) {
switch (sTheme) {
default:
case THEME_DEFAULT:
activity.setTheme(R.style.AppTheme);
break;
case THEME_WHITE:
activity.setTheme(R.style.AppTheme_Solarized);
break;
case THEME_BLUE:
activity.setTheme(R.style.BlueTheme);
break;
}
}
}
Main Activity:
public class MainActivity extends AppCompatActivity {
private NavigationView navigationView;
private DrawerLayout drawerLayout;
Toolbar mToolbar;
private MainFragment mFragment;
private int no,no1,no2;
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
no = pref.getInt("color",0);
if(no == 0)
{
setTheme(R.style.AppTheme);
}
else if(no == 1)
{
setTheme(R.style.AppTheme_Solarized);
}
else if(no == 2)
{
setTheme(R.style.BlueTheme);
}
// Theme.onActivityCreateSetTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thank you.
Solution
In your Settings
class you are writing the selected color into "MyPrefs"
preferences, but in your MainActivity
your are reading from "MyPref"
(without S) preferences.
You have already had the public constant MyPREFERENCES
, try to use it in the MainActivity
also.
Answered By - Vasily Kabunov
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.