1

У меня есть 2 класса MainActivity и DialogBox и есть одна кнопка в моей * activity_main.xml *, которая изначально не доступна для кликов. Я хочу сделать его кликабельным каждый раз, когда пользователь вводит правильное имя пользователя и пароль, а затем нажимает confrim или setPositiveButton в моем диалоговом окне.Как установить кнопку, кликабельную, из другого класса?

Вот мой cpde для MainActivity:

public class MainActivity extends Activity { 
    Button buttonSetting; 

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

     buttonSetting = (Button) findViewById(R.id.buttonSettings); 
    } 

    public void ShowDialog(View view) { 
     DialogBox dialogBox = new DialogBox(); 
     dialogBox.show(getFragmentManager(), "Dialog Box"); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 

Вот мой DialogBox класс:

public class DialogBox extends DialogFragment { 
    private static String username = "admin"; 
    private static String password = "1234"; 
    String typeUsername; 
    String typePassword; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     final LayoutInflater layoutInflater = getActivity().getLayoutInflater(); 

     View custom = layoutInflater.inflate(R.layout.custom, null); 
     final EditText editTextUsername = (EditText) custom.findViewById(R.id.editTextUsername); 
     final EditText editTextPassword = (EditText) custom.findViewById(R.id.editTextPassword);    
     builder.setView(custom); 

     typePassword = editTextPassword.getText().toString(); 
     typeUsername = editTextUsername.getText().toString(); 

     builder.setNegativeButton(R.string.cancel, 
      new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Toast.makeText(getActivity(), 
         "Negative button was clicked", 
         Toast.LENGTH_SHORT).show(); 
       } 
     }); 

     builder.setPositiveButton(R.string.confirm, 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        typePassword = editTextPassword.getText().toString(); 
        typeUsername = editTextUsername.getText().toString(); 

        if (typePassword.equals(password) 
         && typeUsername.equals(username)) 
        { 
         View activity = layoutInflater.inflate(R.layout.activity_main, null); 
         Button buttonSettings = (Button) activity.findViewById(R.id.buttonSettings); 
         buttonSettings.setEnabled(true); 

         Toast.makeText(getActivity(), "correct!", 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(getActivity(), "Wrong input", 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 
     }); 

     Dialog dialog = builder.create(); 
     return dialog; 
    } 
} 
+3

На данный момент, пожалуйста, обратитесь к [Android Dev | Передача событий обратно на хост диалога] (http://developer.android.com/guide/topics/ui/dialogs.html#PassingEvents). Вам понадобится интерфейс для взаимодействия с вашей «Деятельностью». –

+0

что у вас на этом вопрос и что происходит с кодом? –

ответ

0

вы всегда должны listen к изменению текста в username и password поле user inputs и. но подход плохой, когда кто-то, кто пытается случайно ввести текст, может легко узнать его правильные учетные данные. Вы можете установить text listeners в андроиде

0

Попробуйте это ..

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

    buttonSetting = (Button) findViewById(R.id.buttonSettings); 

// display the AlertDialog in your MainActivity 
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
final LayoutInflater layoutInflater = getActivity().getLayoutInflater(); 

View custom = layoutInflater.inflate(R.layout.custom, null); 
final EditText editTextUsername = (EditText) custom.findViewById(R.id.editTextUsername); 
final EditText editTextPassword = (EditText) custom.findViewById(R.id.editTextPassword);    
builder.setView(custom); 


typePassword = editTextPassword.getText().toString(); 
typeUsername = editTextUsername.getText().toString(); 

builder.setNegativeButton(R.string.cancel, 
     new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       Toast.makeText(getActivity(), 
         "Negative button was clicked", 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 

builder.setPositiveButton(R.string.confirm, 
     new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 


       typePassword = editTextPassword.getText().toString(); 
       typeUsername = editTextUsername.getText().toString(); 

       if (typePassword.equals(password) 
         && typeUsername.equals(username)) 
       { 
        //this will perform buttonSetting click function 
        buttonSetting.performClick(); 
        Toast.makeText(getActivity(), 
          "correct!", 
          Toast.LENGTH_SHORT).show(); 

       } 
       else 
       { 
        Toast.makeText(getActivity(), 
          "Wrong input", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

Dialog dialog = builder.create(); 

} 
Смежные вопросы