2016-11-04 6 views
-1

メッセージとチェックボックスを持つダイアログを作成しようとしています。私は次のコードを使用していますAlertDialogは、メッセージを使用していない場合にのみ複数選択項目を表示します。

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(); 
} 

このコードを実行すると、チェックボックスとテキストは表示されません。メッセージ(「これは警告です」)を削除すると、チェックボックスが表示されます。また、メッセージをタイトルに変更すると、チェックボックスが表示されますが、元のメッセージは長すぎてタイトルに使用できません。

希望はこれです。要点は、メッセージとチェックボックスの両方をチェックしてダイアログを表示して、ダイアログが再び表示されないようにすることです。

答えて

0

この例を見てください。チェックボックス付きの警告ダイアログが表示されます。これは、正常に動作します:警告ダイアログは、メッセージの1種類だけを表示するようにフィットする

https://github.com/alessandroargentieri/AuctionExample

+0

それが動作する別のソリューションを見るのは素晴らしいですが、私も非常に興味を持ってうまくいかないものを私の例では – MWB

+0

[OK]を、私はそれをテストしています、別の回答を投稿しています –

0

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(); 
} 

全体の例は、です。

私が理解しているように、マルチメッセージよりもテキストメッセージを表示したい場合は、カスタムレイアウトを使用する必要があります。

ここでは、同じ項目についてStackOverflowに関する他の同様の質問があり、誰もが同じ提案をしています。「複雑な」レイアウトのカスタムレイアウトの使用。

これらのリンクをご覧ください:

Create AlertDialog with both MultiChoiceItems and message

Android : Alert Dialog with Multi Choice

関連する問題