Ошибка из-за неправильной комбинации 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();
}
});
Ответы
Ответ 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();
}