Ошибка из -за неверной комбинации тостов и 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();
}
});
Решение
Как сказал Кенни, this
ссылается на View.OnClickListener
вместо вашего Activity
. Анкет Изменить это, на MyActivity.this
.
Например,
public class MyActivity extends Activity {
// ... other code here
Toast.makeText(MyActivity.this, Lname, Toast.LENGTH_SHORT).show();
Другие советы
В таком случае, this
относится к экземпляру анонимного подкласса View.OnClickListener
. Анкет Вы должны ссылаться на this
класса, где вы создаете анонимный класс.
Использовать MyActivity.this
в качестве this
относится к вашему onclickListener
.
Вы можете использовать getApplicationContext()
также. Увидеть документация.
Где бы то ни было, просто используйте следующее:
((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;
Кроме того, посмотрите, что я немного разложил его, чтобы иметь возможность справиться с гравитацией, как я хочу (иногда вы можете захотеть появиться в центре экрана) ...
Другой подход к достижению вашей цели - это реализовать OnClickListener
интерфейс. Таким образом, вы реализуете onClick()
Метод в вашем Activity
и таким образом вы можете назначить this
. Анкет Кроме того, вы можете назначить this
на несколько Button
с Вы можете различить эти Button
s друг от друга, сравнивая свои идентификаторы через соответствующие 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();
}
}
попробуй это
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();
}