如何设置一个可点击的按钮,从另一个类?

时间:2013-11-30 11:23:50

标签: android android-ui android-button android-dialogfragment

我有2个类MainActivityDialogBox,我的* activity_main.xml *中有一个按钮,最初是不可点击的。我想在每次用户输入正确的用户名和密码时点击它,然后点击 confrim 或我的对话框中的setPositiveButton

以下是我对MainActivity的cpde:

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

2 个答案:

答案 0 :(得分:0)

您应始终listen user inputs并更改usernamepassword框中的文字。但是,当试图随机输入文本的人可能很容易知道其正确的登录凭据时,这种方法很安静。您可以在android

中设置text listeners

答案 1 :(得分: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();

}