Ошибка из-за неправильной комбинации Toast и OnClickListener - PullRequest
35 голосов
/ 25 декабря 2010

Я пытаюсь использовать 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();



        }
    });

Ответы [ 7 ]

94 голосов
/ 25 декабря 2010

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

Например,

public class MyActivity extends Activity {
// ... other code here
Toast.makeText(MyActivity.this, Lname, Toast.LENGTH_SHORT).show();
7 голосов
/ 25 декабря 2010

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

4 голосов
/ 14 мая 2013

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

3 голосов
/ 16 февраля 2013

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

2 голосов
/ 10 июня 2012

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

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

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

1 голос
/ 13 марта 2013

Другим подходом к достижению вашей цели является реализация интерфейса OnClickListener. Таким образом, вы реализуете метод onClick() в вашем Activity и можете назначить this. Кроме того, вы можете назначить this нескольким Button с. Вы можете отличить эти 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();
    }
}
0 голосов
/ 27 июля 2016

попробуйте

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