2016-11-04 4 views
-1

Ich versuche, einen Dialog zu erstellen, der eine Nachricht und ein Kontrollkästchen enthält. Ich bin mit dem folgenden CodeAlertDialog zeigt mehrere Auswahloptionen nur, wenn keine Nachricht verwendet wird

private void displayWarning() { 

    SharedPreferences prefs; 
    final String PREFS_NAME = "UserData"; 
    final String PREF_SHOW_WARNING_KEY = "show_warning"; 

    prefs = this.getActivity().getSharedPreferences(PREFS_NAME, 0); 

    final String[] items = {"do not show again"}; 
    final boolean[] itemsChecked = {false}; 

    boolean displayWarnings = prefs.getBoolean(PREF_SHOW_WARNING_KEY, true); 

    if (displayWarnings) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
     builder.setMessage("this is a warning") 
       .setCancelable(false) 
       .setMultiChoiceItems(items, itemsChecked, new OnMultiChoiceClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
         if (isChecked) { 
          itemsChecked[which] = false; 
         } else { 
          itemsChecked[which] = true; 
         } 

        } 
       }) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // do things 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 
    if (itemsChecked[0]) { 
     displayWarnings = false; 
    } 
    else { 
     displayWarnings = true; 
    } 
    prefs.edit().putBoolean(PREF_SHOW_WARNING_KEY, displayWarnings).commit(); 
} 

Wenn dieser Code ausgeführt wird, das Kontrollkästchen und den Text „nicht mehr anzeigen“ angezeigt bekommen doens't. Wenn ich die Nachricht entferne ("dies ist eine Warnung"), bekomme ich die Checkbox. Auch wenn ich die Nachricht zu einem Titel ändere, erhalte ich das Kontrollkästchen, aber die ursprüngliche Nachricht ist zu lang, um in einem Titel zu verwenden ...

Hoffe, das macht Sinn. Die Quintessenz ist, dass ich einen Dialog mit einer Nachricht und einem Kontrollkästchen für den Benutzer möchte, damit der Dialog nie wieder angezeigt wird.

Antwort

0

Schauen Sie sich dieses Beispiel an. Ich habe einen Alarmdialog mit einer Checkbox. Es funktioniert gut:

public class StartActivity extends AppCompatActivity { 

SharedPreferences sharedpreferences; 
String email_pref; 
String passw_pref; 
Boolean remember; 


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

    sharedpreferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); 
    email_pref = sharedpreferences.getString("EMAIL_SAVED", ""); 
    passw_pref = sharedpreferences.getString("PASSW_SAVED", ""); 
    remember = sharedpreferences.getBoolean("REMEMBER", false); 
} 


public void SignIn(View v){ 
    // dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    // custom dialog 
    final Dialog dialog = new Dialog(StartActivity.this); 
    dialog.setContentView(R.layout.sign_in_layout); //il suo layout personalizzato 
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    // set the custom dialog components - text, image and button 
    final EditText email = (EditText) dialog.findViewById(R.id.editEmailSignIn); 
    final EditText password = (EditText) dialog.findViewById(R.id.editPasswordSignIn); 
    final CheckBox rememberCheck = (CheckBox) dialog.findViewById(R.id.check_in); 


    if(remember == true && !email_pref.equals("") && !passw_pref.equals("")){ 
     email.setText(email_pref); 
     password.setText(passw_pref); 
     rememberCheck.setChecked(true); 
    } 

    Button dialogButton = (Button) dialog.findViewById(R.id.btn_confirm_signin); 
    dialogButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String mail = email.getText().toString(); 
      String psw = password.getText().toString(); 
      //QUERY AL DB PER VEDERE SE L'UTENTE ESISTE E ACCESSO EVENTUALE ALL'ACTIVITY SUCCESSIVA OPPURE ERRORE 
      String query = "SELECT email, password FROM users WHERE email='" + mail + "' AND password = '" + psw + "'"; 
      final SQLiteDatabase db = openOrCreateDatabase("AuctionDB", MODE_PRIVATE, null); 
      //db.execSQL(query); 
      Cursor c = db.rawQuery(query, null); 
      if(!c.moveToFirst()){ 
       Toast.makeText(getApplicationContext(),"No matches!", Toast.LENGTH_LONG).show(); 
      }else{ 
       //Toast.makeText(getApplicationContext(),"UTENTE TROVATO", Toast.LENGTH_LONG).show(); 
       dialog.dismiss(); 

       if(rememberCheck.isChecked()){ 
        SharedPreferences.Editor editor = sharedpreferences.edit(); 
        editor.putString("EMAIL_SAVED", email.getText().toString()); 
        editor.putString("PASSW_SAVED", password.getText().toString()); 
        editor.putBoolean("REMEMBER", true); 
        editor.commit(); 
       }else{ 
        SharedPreferences.Editor editor = sharedpreferences.edit(); 
        editor.putString("EMAIL_SAVED", ""); 
        editor.putString("PASSW_SAVED", ""); 
        editor.putBoolean("REMEMBER", false); 
        editor.commit(); 
       } 

       //pass to the ViewActivity 
       Intent intent = new Intent(StartActivity.this, ViewActivity.class); 
       Bundle b = new Bundle(); 
       b.putString("email", mail); 
       intent.putExtras(b); 
       startActivity(intent); 
       finish(); 
      } 

     } 
    }); 
    dialog.show(); 
} 

das gesamte Beispiel ist:

https://github.com/alessandroargentieri/AuctionExample

+0

Obwohl es groß ist, eine andere Lösung zu finden, die funktioniert, ich bin auch sehr interessiert, was in meinem Beispiel – MWB

+0

ok schief geht, habe ich es getestet Ich schreibe eine andere Antwort –

0

Der Alarm Dialog nur eine Art von Nachricht zu zeigen, paßt.

Also, wie ich verstehen kann, wenn Sie entweder eine Textnachricht als ein Multichoice anzeigen möchten, müssen Sie ein benutzerdefiniertes Layout verwenden.

Es gab viele andere ähnliche Fragen auf StackOverflow über den gleichen Artikel und jeder hat den gleichen Vorschlag: Verwenden eines benutzerdefinierten Layouts für "komplexe" Layouts.

diese Links sehen:

Create AlertDialog with both MultiChoiceItems and message

Android : Alert Dialog with Multi Choice

Verwandte Themen