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
はあなたのActivity
ではなくView.OnClickListener
を参照しています。これを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;
また、重力を適切に処理できるように少し分解したことを確認してください(トーストを画面の中央に表示したい場合があります)...
目標を達成するためのもう1つの方法は、OnClickListener
インターフェイスを実装することです。このようにして、Activity
にonClick()
メソッドを実装し、this
を割り当てることができます。さらに、this
を複数のButton
sに割り当てることができます。これらのButton
sは、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();
}
}
これを試して
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();
}