Подтвердить что ты не робот

Ошибка из-за неправильной комбинации Toast и OnClickListener

Я пытаюсь использовать Toast внутри OnCLickListener. Мой код вызывает следующую ошибку:

The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}, String, int)

Это мой код:

    Button register = (Button) findViewById(R.id.register);
    register.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            EditText name = (EditText)findViewById(R.id.name);
            String Lname = name.getText().toString();

            Toast.makeText(this, Lname, Toast.LENGTH_SHORT).show();



        }
    });
4b9b3361

Ответ 1

Как сказал Кенни, this ссылается на View.OnClickListener вместо вашего Activity. Измените это, на MyActivity.this.

Например,

public class MyActivity extends Activity {
// ... other code here
Toast.makeText(MyActivity.this, Lname, Toast.LENGTH_SHORT).show();

Ответ 2

В этом случае this относится к экземпляру анонимного подкласса View.OnClickListener. Вы должны обратиться к this класса, в котором вы создаете анонимный класс.

Ответ 3

Используйте MyActivity.this, поскольку this ссылается на ваш onclickListener.

Ответ 4

Вы также можете использовать getApplicationContext(). См. Документацию .

Ответ 5

В любом месте используйте только следующее:

((Activity) mContext).runOnUiThread(new Runnable() {
                    public void run() {
                        Toast my_toast = Toast.makeText(mContext, "YOUR TEXT OR STRING", Toast.LENGTH_LONG);
                        my_toast.setGravity(Gravity.CENTER, 0, 0);
                        my_toast.show();
                    }
                });

Вам просто нужно определить в верхней части своей деятельности (сразу после onCreate):

mContext = this;

Кроме того, см., что я немного разложил его, чтобы иметь возможность обрабатывать гравитацию, как я хочу (иногда вы можете захотеть, чтобы тост появлялся в центре экрана)...

Ответ 6

Другой подход для достижения вашей цели - реализовать интерфейс OnClickListener. Таким образом, вы реализуете метод onClick() в своем Activity, и поэтому вы можете назначить this. Кроме того, вы можете назначить this нескольким Button s. Вы можете отличить эти Button друг от друга, сравнивая их идентификаторы с помощью соответствующего оператора if, соответственно switch в методе onClick().

public class MyActivity extends Activity implements OnClickListener{

    // ...

    protected void onCreate (Bundle savedInstanceState){
        // ...
        Button register = (Button) findViewById(R.id.register);
        register.setOnClickListener(this); 
    }

    public void onClick(View arg0) {
        EditText name = (EditText) findViewById(R.id.name);
        String text = name.getText().toString();

        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }
}

Ответ 7

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

 public void onClick(View arg0) {
        EditText name = (EditText)findViewById(R.id.name);
        String Lname = name.getText().toString();
        Toast.makeText(arg0.getContext(), Lname, Toast.LENGTH_SHORT).show();
    }