[英]How to call a method from MainActivity which takes views as parameters, from a class which extends JobService?
[英]How to call a method of MainActivity by a class that extends Button
我想从扩展Button的TestButton类中调用在主活动中定义的showMessage()方法。 我在下面使用的代码引发空指针异常。 我不确定该如何解决。 你能帮我么?
主要活动
public class MainActivity extends MultiTouchActivity {
TestButton btn;
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (TestButton)findViewById(R.id.button4);
btn.setOnTouchListener(this);
}
public void showMessage()
{
Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show();
}
TestButton类
public class TestButton extends Button {
MainActivity m;
public TestButton(final Context context, final AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(final MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_UP)
{
m = new MultitouchtestActivity();
m.showMessage();
}
return super.onTouchEvent(event);
}
}
编辑谢谢@ΦXoceППepeúpa,这解决了我的问题,但是我做了一些更改。
btn.setCallback(this); from btn.setCallback();
和
public void setCallback(final ICallback iCallback)
2件事:
像这样实现回调:
interface ICallback{
void showMessage();
}
public class MainActivity extends MultiTouchActivity implements ICallback{
TestButton btn;
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (TestButton)findViewById(R.id.button4);
btn.setOnTouchListener(this);
//register here the callback
btn.setCallback(this);
}
@Override
public void showMessage()
{
Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show();
}
public class TestButton extends Button {
MainActivity m;
ICallback iCallback;
public setCallback(final ICallback iCallback)
{
this.iCallback = iCallback;
}
public TestButton(final Context context, final AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(final MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_UP)
{
iCallback.showMessage();
}
return super.onTouchEvent(event);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.