web-dev-qa-db-ja.com

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



        }
    });
35
Harsha M V

ケニーが言ったように、thisはあなたのActivityではなくView.OnClickListenerを参照しています。これをMyActivity.thisに変更します。

例えば、

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

この場合、thisView.OnClickListenerの匿名サブクラスのインスタンスを指します。匿名クラスを作成するクラスのthisを参照する必要があります。

7
jsadfeew

使用する MyActivity.thisthisはあなたのonclickListenerを指します。

4
Mr.India

getApplicationContext()も使用できます。 ドキュメント を参照してください。

3
Jock Mahon

どこでも、以下を使用してください:

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

また、重力を適切に処理できるように少し分解したことを確認してください(トーストを画面の中央に表示したい場合があります)...

2
Hubert

目標を達成するためのもう1つの方法は、OnClickListenerインターフェイスを実装することです。このようにして、ActivityonClick()メソッドを実装し、thisを割り当てることができます。さらに、thisを複数のButtonsに割り当てることができます。これらのButtonsは、onClick()メソッド内の適切なif、またはswitchステートメントを介してIDを比較することで、互いに区別できます。

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();
    }
}
1
Jock Mahon

これを試して

 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();
    }
0
A.G.THAMAYS