Ошибка из -за неверной комбинации тостов и OnclickListener

StackOverflow https://stackoverflow.com/questions/4531539

  •  13-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать 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с Вы можете различить эти Buttons друг от друга, сравнивая свои идентификаторы через соответствующие 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();
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top