Установите только один флажок для всплывающих окон
У меня запуск приложения зависит от предпочтений пользователя с тремя различными флажками:
1 - запустить приложение без брызг и музыки.
2 - запустить приложение только со всплеском.
3 - запустить приложение со спальшем и музыкой.
с приведенным ниже кодом его работа отлично.
Но все же две точки, которые должны быть достигнуты:
ПЕРВЫЙ только один флажок должен быть отмечен.
ВТОРОЙ После того, как вы отметили любой из флажков, как вы предпочитаете, затем вернитесь к mainacctivity, здесь вы можете выйти из приложения, используяКнопка назад или жекнопка выхода который у меня уже есть в моем меню параметров, проблема в том, что либо с помощьюКнопка назад или жекнопка выхода он не реагирует на первый щелчок, мне нужно дважды щелкнуть, чтобы выйти из приложения.
но я не могу этого достичь,
любая помощь, пожалуйста, будет оценена.
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread()
{
public void run()
{
try
{
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean music = getPrefs1.getBoolean("splash_music", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000); }
catch (InterruptedException e){
e.printStackTrace(); }
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent); }}
};
timer.start(); }
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
В папке xml:prefs.xml
<?xml version="1.0" encoding="utf-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:title="without splash screen"
android:defaultValue="true"
android:key="without_splash_screen"
android:summary="Start app without splash"/>
<CheckBoxPreference android:title="splash screen"
android:defaultValue="true"
android:key="splash"
android:summary="Start app with splash only" />
<CheckBoxPreference android:title="splash screen music"
android:defaultValue="true"
android:key="splash_music"
android:summary="Start app with splash and music" />
</PreferenceScreen>
ОБНОВИТЬ:
Я попробовал также приведенный ниже код, но он ничего не меняет, но все чеки можно проверить:
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread()
{
public void run()
{
try
{
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean music = getPrefs1.getBoolean("splash_music", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
public void getPrefs() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
boolean splash = getPrefs.getBoolean("splash", false);
boolean music = getPrefs.getBoolean("splash_music", false);
if (without_splash_screen == true){
splash = false;
music = false;
}else if (splash == true){
music = false;
without_splash_screen = false;
}else if (music == true){
without_splash_screen = false;
splash = false;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
ОБНОВЛЕНИЕ: я попробовал также другой код, но он ничего не меняет, но все чечбоксы можно проверить:
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
else {
getPrefs.getBoolean("splash", false);
getPrefs.getBoolean("splash_music", false);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
else
{
getPrefs.getBoolean("without_splash_screen", false);
getPrefs.getBoolean("splash_music", false);
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
boolean splash_music = getPrefs.getBoolean("splash_music", true);
if (splash_music == true) {
ourSong.start();
setContentView(R.layout.splash);
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
else
{
getPrefs.getBoolean("without_splash_screen", false);
getPrefs.getBoolean("splash", false);
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
Любой совет, спасибо.
ОБНОВЛЕНИЕ 3 (ВЕСЬ ПРОЕКТ):
1 - один флажок отмечен как достигнутый.
2 - использование кнопки «Назад» или «Выход» в MainActivity, не отвечает на первый щелчок, для выхода из приложения нужно щелкнуть два или три раза.
Splash.java
public class Splash extends Activity{
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle DrTsn) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// TODO Auto-generated method stub
super.onCreate(DrTsn);
setContentView(R.layout.splash);
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean without_splash_screen = getPrefs.getBoolean("without_splash_screen", true);
if (without_splash_screen == true)
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
boolean splash = getPrefs.getBoolean("splash", true);
if(splash == true) {
setContentView(R.layout.splash);
Thread timer = new Thread()
{
public void run()
{
try
, {
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
SharedPreferences getPrefs1 = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean music = getPrefs1.getBoolean("splash_music", true);
if (music == true)
ourSong.start();
Thread timer = new Thread(){
public void run(){
try{
sleep(2000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
}
}
};
timer.start();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
ourSong.release();
finish();
}
}
Prefs.java
public class Prefs extends PreferenceActivity {
CheckBoxPreference splash;
CheckBoxPreference splash_music;
CheckBoxPreference no_splash_music;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
splash = (CheckBoxPreference) findPreference("splash");
splash_music = (CheckBoxPreference) findPreference("splash_music");
no_splash_music = (CheckBoxPreference) findPreference("without_splash_screen");
splash.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(true);
splash_music.setChecked(false);
no_splash_music.setChecked(false);
return true;
}
});
splash_music
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(false);
splash_music.setChecked(true);
no_splash_music.setChecked(false);
return true;
}
});
no_splash_music
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
// TODO Auto-generated method stub
splash.setChecked(false);
splash_music.setChecked(false);
no_splash_music.setChecked(true);
return true;
}
});
}
}
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.cool_menu, menu);
getLayoutInflater().setFactory(new Factory() {
public View onCreateView(String name, Context context,AttributeSet attrs) {
if (name .equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater li = LayoutInflater.from(context);
final View view = li.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
((TextView) view).setTextSize(25);
((TextView) view).setTextColor(Color.RED);
}
}
);
return view;
}
catch (InflateException e) {
}
catch (ClassNotFoundException e) {
}
}
return null;
}
}
);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.aboutUs:
Intent i = new Intent("com.example.checkbox.ABOUT");
startActivity(i);
break;
case R.id.preferences:
Intent p = new Intent("com.example.checkbox.PREFS");
startActivity(p);
break;
case R.id.exit:
finish();
break;
}
return false;
}
@Override
public void onBackPressed() {
finish();
}
}
AboutUs.java
public class AboutUs extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.about);
Button button = (Button)findViewById(R.id.about_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish(); }
}
);}
}