关于按钮监听OnClickListener()中如何调用其它类的方法?

LostOmato 2014-12-11 03:11:14
我是初学者,关于类与类之间的方法的调用的概念有些模糊不清
只知道应该先new一个被调用类的一个对象,再用该对象实现方法

昨天照着教程写了一个2048游戏,还算顺利。
现在自己添加了一个游戏重新开始的按钮
但是无法实现在MainActivity中监听到GameView中的方法
下面是两个类中的方法



这是button的代码

private Button button1;
//////////////////重新开始按钮////////////////
public void Rebutton(){
button1 = (Button)findViewById(R.id.button);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("13215456");//这句可以执行
// GameView.getGameView().startGame();//加上这句在点击按钮程序就会崩溃
}
});
}
...全文
1072 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
痆古酊旳琲伤 2016-04-04
  • 打赏
  • 举报
回复
引用 22 楼 u014415821 的回复:
[quote=引用 20 楼 xuanyuanyelian 的回复:] LZ后来有解决这个问题吗?我最近刚开始学Android,也遇到了这个问题。。。
朋友你解决这个问题了吗?[/quote] 不经常上,已经解决了。 我在GameView里面实现自己 public static GameView gView = null; 然后在3个构造方法中加了 个gView= this; 最后加了个getGameView用来获取GameView对象 在其他类里面就可以直接用GameView.getGameView().XXXX;来调用GameView里面的方法 或者还可以直接在要调用的方法前加static静态变量,然后把相应的类变量和成员变量也都编程static,这样就可以直接用GameView.XXXX;调用方法
不知道猫咪 2016-03-21
  • 打赏
  • 举报
回复
这个问题解决了吗?我遇到了一模一样的问题,因为我也刚接触安卓,在写2048游戏,和你的一样
不知道猫咪 2016-03-21
  • 打赏
  • 举报
回复
引用 20 楼 xuanyuanyelian 的回复:
LZ后来有解决这个问题吗?我最近刚开始学Android,也遇到了这个问题。。。
朋友你解决这个问题了吗?
痆古酊旳琲伤 2015-05-30
  • 打赏
  • 举报
回复
LZ后来有解决这个问题吗?我最近刚开始学Android,也遇到了这个问题。。。
LostOmato 2014-12-13
  • 打赏
  • 举报
回复
引用 16 楼 qaserfvvbbert 的回复:
onclick里用到的必须是final或者全局变量吧 试试在外面定义一个全局GameView gameView = null; 然后在onClickListener里初始化? 我不确定
定义了全局变量也是不行。 但是我不太清楚应该怎样初始化这个gameView 我应该传什么样的参数 也没有找到set那两个参数的方法 理应是从GridLayout中继承方法
LostOmato 2014-12-13
  • 打赏
  • 举报
回复
引用 17 楼 u010668114 的回复:
你把你mainactivity第40行附近的代码贴出来看看
就是我开贴写的Rebutton的那一段。
只为搞笑 2014-12-13
  • 打赏
  • 举报
回复
你把你mainactivity第40行附近的代码贴出来看看
hudk114 2014-12-13
  • 打赏
  • 举报
回复
onclick里用到的必须是final或者全局变量吧 试试在外面定义一个全局GameView gameView = null; 然后在onClickListener里初始化? 我不确定
LostOmato 2014-12-13
  • 打赏
  • 举报
回复
LostOmato 2014-12-12
  • 打赏
  • 举报
回复
LostOmato 2014-12-12
  • 打赏
  • 举报
回复

这样么?没找到
[quote=引用 12 楼 janloven 的回复:]
点击某个类或者方法,Ctrl+H,可以追踪使用情况,如果是用Eclipse开发的话
janloven 2014-12-12
  • 打赏
  • 举报
回复
点击某个类或者方法,Ctrl+H,可以追踪使用情况,如果是用Eclipse开发的话
引用 10 楼 LostOmato 的回复:
[quote=引用 9 楼 s_include 的回复:] [quote=引用 8 楼 LostOmato 的回复:] [quote=引用 7 楼 u013377714 的回复:] GameView gameView=new GameView(this); gameView.startGame();
这样写也不行啊 这里的this指的是OnClickListener类型的一个对象啊。 构造函数的参数应该是Context 类型的不是么?[/quote] MainAcitivity.this[/quote]还是不行 整个程序里应该只用到了这个构造方法
	public GameView(Context context, AttributeSet attrs) {
		super(context, attrs);
		
		initGameView();
	}
还有一点不明白的是我没搞懂在哪里调动到了这个构造方法 因为没有找到在哪创建了GameView的对象[/quote]
LostOmato 2014-12-12
  • 打赏
  • 举报
回复
public class GameView extends GridLayout
之前忘记把这个贴出来了 是继承GridLayout的一个类
LostOmato 2014-12-12
  • 打赏
  • 举报
回复
引用 9 楼 s_include 的回复:
[quote=引用 8 楼 LostOmato 的回复:] [quote=引用 7 楼 u013377714 的回复:] GameView gameView=new GameView(this); gameView.startGame();
这样写也不行啊 这里的this指的是OnClickListener类型的一个对象啊。 构造函数的参数应该是Context 类型的不是么?[/quote] MainAcitivity.this[/quote]还是不行 整个程序里应该只用到了这个构造方法
	public GameView(Context context, AttributeSet attrs) {
		super(context, attrs);
		
		initGameView();
	}
还有一点不明白的是我没搞懂在哪里调动到了这个构造方法 因为没有找到在哪创建了GameView的对象
manxiSafe 2014-12-12
  • 打赏
  • 举报
回复
引用 8 楼 LostOmato 的回复:
[quote=引用 7 楼 u013377714 的回复:] GameView gameView=new GameView(this); gameView.startGame();
这样写也不行啊 这里的this指的是OnClickListener类型的一个对象啊。 构造函数的参数应该是Context 类型的不是么?[/quote] MainAcitivity.this
LostOmato 2014-12-12
  • 打赏
  • 举报
回复
引用 7 楼 u013377714 的回复:
GameView gameView=new GameView(this); gameView.startGame();
这样写也不行啊 这里的this指的是OnClickListener类型的一个对象啊。 构造函数的参数应该是Context 类型的不是么?
水的川 2014-12-11
  • 打赏
  • 举报
回复
GameView gameView=new GameView(this); gameView.startGame();
LostOmato 2014-12-11
  • 打赏
  • 举报
回复
引用 4 楼 LostOmato 的回复:
[quote=引用 3 楼 s_include 的回复:] 都报空指针了 , GameView有初始化??
我就是想问问这一句应该怎么写? 初始化=null[/quote]

	public GameView(Context context, AttributeSet attrs) {
		super(context, attrs);
		
		initGameView();
	}

	public GameView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		
		initGameView();
	}

	public GameView(Context context) {
		super(context);
		
		initGameView();
	}
这是GameView的三个构造方法。在MainAcitivity中创建一个GameView的对象应该引用使用怎样的参数 创建对象之后对象也可以直接调用stargame方法吧。
  • 打赏
  • 举报
回复
引用 4 楼 LostOmato 的回复:
[quote=引用 3 楼 s_include 的回复:] 都报空指针了 , GameView有初始化??
我就是想问问这一句应该怎么写? 初始化=null[/quote] getGameView方法要获取一个gameview对象才行
LostOmato 2014-12-11
  • 打赏
  • 举报
回复
引用 3 楼 s_include 的回复:
都报空指针了 , GameView有初始化??
我就是想问问这一句应该怎么写? 初始化=null
加载更多回复(3)

80,471

社区成员

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

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