2013-09-11 3 views
1

Я хочу добавить заявление об отказе в свое приложение, которое появляется при первом запуске приложения. Если Пользователь отклоняется, приложение закрывается. Если пользователь снова откроет приложение, отказ должен появиться снова, пока пользователь не примет его. После его принятия он должен скрываться и больше не появляться.alertDialog отказывается от ответственности при каждом запуске

Моя проблема: Если я принял отказ от ответственности, он закрывается, и все в порядке. Но когда я запускаю приложение, оно снова появляется.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    final SharedPreferences pref = getSharedPreferences("Preferences", MODE_PRIVATE); 

    String lver = pref.getString("Version", ""); 
    String ver = this.getString(R.string.version); 
    if(ver != lver) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Disclaimer") 
      .setMessage(this.getString(R.string.disclaimer)) 
      .setCancelable(false) 
      .setIcon(R.drawable.caution) 
      .setPositiveButton("Accept", new DialogInterface.OnClickListener() { 
       SharedPreferences.Editor edit = pref.edit(); 
       public void onClick (DialogInterface dialog, int id) { 

        boolean accepted = true; 
        dialog.cancel(); 
        if(accepted == true) 
        { 
        edit.putString("Version", this.getString(R.string.version)); 
        edit.commit();} 
       } 
       private String getString(int version) { 
        // I had to create this method, cause i got an error the line above this.getstring(R.string.version) 
        return null; 
       } 
      }) 
      .setNegativeButton("Decline", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        MainActivity.this.finish(); 
       } 
      }); 
     AlertDialog disc = builder.create(); 
     disc.show(); 
} } 

Я нашел quite similar question, но я не мог решить мою проблему с ним.

Я был бы очень рад получить ответ и, если возможно, хорошее объяснение в коде. Потому что я хочу узнать больше/почему он решил мою проблему и не хочет копировать & вставьте код и будьте счастливы, что он работает.

ответ

4

Ваша проблема является, если условие ver != lver, потому что вы должны проверить Струны для равенства с равными.

if(ver.equals(lver)) 

Поскольку эта проблема обсуждалась много раз здесь является link, который должен объяснить это хорошо.

Далее изменить эту часть (я комментировал в коде)

// this doesn't belong here. get it in onClick of the positive Button 
    final SharedPreferences pref = getSharedPreferences("Preferences", MODE_PRIVATE); 
    builder.setTitle("Disclaimer") 
     .setMessage(this.getString(R.string.disclaimer)) 
     .setCancelable(false) 
     .setIcon(R.drawable.caution) 
     .setPositiveButton("Accept", new DialogInterface.OnClickListener() { 
      SharedPreferences.Editor edit = pref.edit(); // the same as with the pef object 
      public void onClick (DialogInterface dialog, int id) { 

       boolean accepted = true; // no need for this because the if clause will always be true 
       dialog.cancel(); // cancel the dialog IF the job here is done 
       if(accepted == true) 
       { 
       edit.putString("Version", this.getString(R.string.version)); // delete the this pointer 
       edit.commit();} 
      } 
      // no need for this method 
      private String getString(int version) { 
       // I had to create this method, cause i got an error the line above this.getstring(R.string.version) 
       return null; 
      } 
     }); 
     .setNegativeButton("Decline", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       MainActivity.this.finish(); 
      } 
     }); 

к этому

builder.setTitle("Disclaimer") 
     .setMessage(this.getString(R.string.disclaimer)) 
     .setCancelable(false) 
     .setIcon(R.drawable.caution) 
     .setPositiveButton("Accept", new DialogInterface.OnClickListener() { 

      public void onClick (DialogInterface dialog, int id) { 
       SharedPreferences pref = getSharedPreferences("Preferences", MODE_PRIVATE); 
       SharedPreferences.Editor edit = pref.edit(); 
       edit.putString("Version", getString(R.string.version)); 
       edit.commit(); 
       dialog.cancel(); 
      } 

     }); 
     .setNegativeButton("Decline", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       MainActivity.this.finish(); 
      } 
     }); 

Теперь она должна быть тонкой

+0

Спасибо за комментарии! Он работал, но я использовал 'if (! Ver.equals (lver)) {...}' как @sddamico вместо 'if (ver.equals (lver)) {...}'. Я редактирую рабочий код на свой вопрос – Kroenig

2

Похоже, вы сравниваете два оператора String с оператором !=. Правильный способ сравнения строк в Java использует функцию .equals(String string).

Ваше сравнение должно, вероятно, выглядеть следующим образом:

if(!ver.equals(lver)){ 
    ... 
} 
0

** Спасибо всем за ответы ... но в соответствии с моей проблемой. Отказ от диалога должен выглядеть так: enter image description here

i have customise the Dialog and used the same logic of SharedPrefence to save the users choice. 
    The source code are --- 
    ****MainActivity.java ***** 
    public class MainActivity extends Activity { 
     SharedPreferences prefs ; 

     boolean isShowAgain=true; 
     boolean accepted=false; 
     CheckBox dialogcb; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      prefs = getSharedPreferences("detail", MODE_PRIVATE); 
      boolean isshowagain =prefs.getBoolean("show_again", true); 
      if(isshowagain) 
       showdialog(); 
     } 
     private void showdialog() { 
      final Dialog dialog = new Dialog(this); 
      dialog.setContentView(R.layout.custom_dialog); 
      dialog.setTitle("Disclaimer..."); 
      Button dialogButton = (Button) dialog.findViewById(R.id.button1); 
      dialogcb= (CheckBox) dialog.findViewById(R.id.checkBox1); 
      dialogButton.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
         accepted = dialogcb.isChecked(); 
         SharedPreferences.Editor edit=prefs.edit(); 
         edit.putBoolean("show_again",!accepted); 
         edit.commit(); 
         dialog.dismiss(); 
       } 
      }); 
      dialog.show(); 
     } 
    }* 


    and the custom_dialog.xml is--- 
    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 
     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dip" 
      android:layout_marginLeft="20dip" 
      android:layout_marginRight="20dip" 
      android:layout_marginTop="10dip" 
      android:text="This is alert dialog will run every time when App will launch . 
      if you want to close for always just check on check box and then press agree button" /> 
     <CheckBox 
      android:id="@+id/checkBox1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Do not show it Again." /> 
     <Button 
      android:id="@+id/button1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="5dip" 
      android:layout_marginLeft="5dip" 
      android:layout_marginRight="5dip" 
      android:layout_marginTop="5dip" 
      android:text="Agree" /> 
    </LinearLayout>* 
Смежные вопросы