Android问题Button的onClick监听里,如何调用外部类的方法

不知道猫咪 2016-03-21 01:07:24
问题描述:我是写2048小游戏的时候发现的这个问题,而且一直无法解决。
1,这个是我的主类MainActivity,里面根据id添加了一个重玩按钮,我想实现点击按钮的时候重新开始游戏

2,这个是我的游戏方法实现类,里面有三个构造函数,构造函数下面有一个startGame方法
而我的目的就是在MainActivity的onclick里调用这个方法


3,出问题了:在第一个截图里,GameView g = new GameView(getMainActivity());实例化一个GameView,这个GameView有三个构造函数,必须带形参Context。而我在new的时候,怎么传参数?
因为截图不会报错,但是不会执行调用startGame方法

没多少分了,但希望各位朋友能解答!感谢!
...全文
493 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
不知道猫咪 2016-03-21
  • 打赏
  • 举报
回复
引用 4 楼 wei220000 的回复:
重写startgame方法,尽量不要new


谢谢好心大哥!帮我解决了这个问题。我再大致描述一下问题和解决思路,希望对后来看到帖子的人有帮助(毕竟我也是初学者)
1.在Manifest.xml添加一个Button按钮,用来重玩游戏并且在MainActivity里添加监听
2.另一个GameView类继承了GridLayout,并且有一个startGame方法,此方法完成了清零和重新开始的逻辑
3.只需要在button的监听里,调用GameView类的startGame方法即可完成点击按钮并且重新开始。

-------------4.总之,我的调用在截图里是错误的,用了类.方法的调用,无法完成-------------下面是4楼给的解决办法,很简单

1.在Manifest.xml文件里,把对应的Button标签换成GameView类的全包名
2.在MainActivity里像声明Button按钮一样,声明这个GameView gameview = (GameView) findViewById(R.id.gameView);
3.直接打点调用gameview的start方法即可gameview.startGame();

下面是截图:
leobert_lan 2016-03-21
  • 打赏
  • 举报
回复
你定义一个Context变量不就好了。。onCreate的时候赋值
不知道猫咪 2016-03-21
  • 打赏
  • 举报
回复
引用 4 楼 wei220000 的回复:
重写startgame方法,尽量不要new
在MainActivity里重写startGame方法,然后被MainActivity的成员调用吗?
不知道猫咪 2016-03-21
  • 打赏
  • 举报
回复
引用 1 楼 qq_26763799 的回复:
clearButton.setOnclickListener(this); MainActivity implement onclickListener @Override public void onclick(View v){ switch(v.getid()){ case R.id.clearButton: GameView g = new GameView(this); g.startGame(); break; } } 试试?
还是不行啊,this报错。我试了把MainActivity implement OnClickListener也不行
wei220000 2016-03-21
  • 打赏
  • 举报
回复
重写startgame方法,尽量不要new
EmperorRanZhiXi 2016-03-21
  • 打赏
  • 举报
回复
不知道你在说什么 自定义控件 用代码 new 的对象 只会调用 1个参数的构造方法 你的意思是 你startGame方法 需要一些其他的参数? 你可以让这个对象暴露一些 setxxxx方法 然后 new 完这个对象 然后setxxx需要的参数 然后在调用 startGame 你说的是这个意思吗?
黄小楼 2016-03-21
  • 打赏
  • 举报
回复
不太清楚楼主的实现方式,不过startGame的话,一般都会有释放数据,初始化数据。你的startGame方法应当是做这一件事情才能够真正做到restart。
qq_26763799 2016-03-21
  • 打赏
  • 举报
回复
clearButton.setOnclickListener(this); MainActivity implement onclickListener @Override public void onclick(View v){ switch(v.getid()){ case R.id.clearButton: GameView g = new GameView(this); g.startGame(); break; } } 试试?
一、实验名称:实验5 事件处理 二、实验日期: 三、实验目的: 基于监听的事件处理 基于回调的事件处理 四、实验用的仪器和材料:Windows+Eclipse+jdk+sdk+adt 五、实验的步骤和方法: 实验一:基于监听的事件处理机制 Activity.java package com.my; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Week05Activity extends Activity implements OnClickListener{ EditText txt; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取button对象 Button btn1 = (Button)findViewById(R.id.button1); Button btn2 = (Button)findViewById(R.id.button2); Button btn3 = (Button)findViewById(R.id.button3); Button btn4 = (Button)findViewById(R.id.button4); Button btn5 = (Button)findViewById(R.id.button5); //获取edittext对象 txt = (EditText)findViewById(R.id.edittext); //定义一个单击事件的监听器(内部类) class MyClickListener implements OnClickListener{ public void onClick(View v) { EditText txt = (EditText)findViewById(R.id.edittext); txt.setText("内部类"); } } //定义一个单击事件的监听器(外部类) class ExtentEvent implements OnClickListener{ private Activity act; private EditText txt; public ExtentEvent(Activity act,EditText txt){ this.act=act; this.txt=txt; } public void onClick(View v) { txt.setText("外部类"); } } //为按钮绑定事件监听(内部类) btn1.setOnClickListener(new MyClickListener()); //为按钮绑定事件监听(外部类) btn2.setOnClickListener(new ExtentEvent(this,txt)); //直接使用Activity作为事件监听器 btn4.setOnClickListener(this); //匿名内部类 btn3.setOnClickListener(new OnClickListener(){ public void onClick(View v) { txt.setText("匿名内部类"); } }); } //直接绑定到标签 public void clickHandler(View source){ EditText et = (EditText)findViewById(R.id.edittext); et.setText("绑定到标签"); } //Activity本身作为事件监听起器类,实现的事件处理方法 public void onClick(View v) { txt.setText("Activity"); } } Main.xml android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:o

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧