Activityの親クラスではないクラスでボタンタップ時の処理を書きたいです。
下のように書いてみたのですが
i1.setOnClickListener( new com.example.sample.name.ann.A(this));の()内でエラーメッセージが表示されてしまいます。
setOnClickListener(android.view.View.OnClickListner)in View cannot be applied to(com.example.sample.name.ann.A)というメッセージです。
どのように解決すればいいですか?
public class A extends AppCompatActivity { public final static String BOR = "com.example..name.BOR"; } public void get_i1 (){ double bor = 19.2; Intent intent = new Intent(this,Input.class); intent.putExtra(BOR,bor); startActivity(intent); } }
public class I extends AppCompatActivity { public A a = new A (); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(com.example.sample.name.R.layout.activity_i); } public void get_i1 (View view){ a.get_i1(); } }
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
View cannot be applied to(com.example.sample.name.ann.A)
元ネタのサイトには
Contextというのはアプリの環境情報のようなもので、Activityの親クラスです。
ですから、Activityではthisを指定すれあなたよかったのですが、クラスが違うので、
Activityからcontextを教えてもらわなければなりません。
とありますが、
public class A extends AppCompatActivity
にはコンストラクタが無いのでContextを送れない
public A a = new A ();
もビルドエラーにもならなくなっている
しかし、問題があるので実行時に落ちたということでしょう
元ネタでは
btn.setOnClickListener( new ButtonClickListener(this) );
とthisをcontextとして送っています。
(このthisがいいかどうかは異論あるかもしれませんが)
投稿2016/08/17 01:14
総合スコア3733
0
ベストアンサー
いきなりこんなわけわからんコードを書くくらいなら、入門レベルの本を読んでサンプルコードを読むなり書くなりするべきです。それくらいトンチンカンなことをしていますよ。
別クラスに分けるというのであれば、次のような形になるかと。
java
1public class A { //Activityの継承は不要、むしろいらぬトラブルの原因 2 3 public final static String BOR = "com.example..name.BOR"; 4 5 } 6 public void get_i1 (Context context){ //引数としてContextを準備(Intentに渡すためのもの) 7 double bor = 19.2; 8 Intent intent = new Intent(context,Input.class); 9 intent.putExtra(BOR,bor); 10 context.startActivity(intent); 11 } 12}
java
1public class I extends AppCompatActivity { 2 3 public A a = new A(); 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(com.example.sample.name.R.layout.activity_i); 9 } 10 public void get_i1 (View view){ 11 a.get_i1(getApplicationContext()); //get_i1にContextを渡して起動 12 } 13}
投稿2016/08/16 11:27
編集2016/08/18 14:48総合スコア20649
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/16 12:06 編集
2016/08/16 12:38
2016/08/16 12:42
2016/08/16 16:58
2016/08/16 17:31
2016/08/17 00:02
2016/08/17 03:37
2016/08/17 03:48
2016/08/17 04:12
2016/08/17 10:00
2016/08/17 11:09
2016/08/17 11:36
2016/08/17 11:57
2016/08/17 12:28
2016/08/17 13:02
2016/08/17 13:05
2016/08/17 13:14
2016/08/17 13:18
2016/08/17 13:24
2016/08/17 13:27
2016/08/17 13:33
2016/08/17 13:51
2016/08/17 14:12
退会済みユーザー
2016/08/17 14:51
2016/08/17 15:16
2016/08/17 15:30
2016/08/18 05:57
2016/08/18 14:48
2016/08/20 06:01
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/17 03:38
2016/08/17 06:28
2016/08/17 11:19