我似乎遇到了与我的活动类通信的对象的问题。该对象是一个带有onClick
方法的视图对象,在调用时,我希望它通知我的活动类,以便它可以执行所述操作。下面是我的情况的一些示例代码(假设已经进行了所有传统的设置操作):
public class MainActivity extends AppCompatActivity{
//...other global methods and objects
//Does not have access to instantiated Entry object(s)
public void entryObjectWasClicked(){
//perform said action
}
}
public class Entry extends View implements View.OnClickListener{
//...other global methods and objects
//Does not have access to the MainActivity object
@Override
public void onClick(View v){
//send a message to the MainActivity to
//somehow call the entryObjectWasClicked() method
}
}
我能想到处理这个问题的唯一方法(在我的头脑中)是在MainActivity
中创建一个静态方法,然后从一个匿名的MainActivity
对象中调用它。 onClick
的{{1}}方法。静态方法方法的问题在于静态方法中的任何后续方法/对象/原语用法强制那些方法/对象/原语是静态的。这违背了能够拥有Entry
对象的两个不同实例的目的。
经过一番观察,我发现使用广播消息,特别是使用MainActivity
向活动发送意图。 This code example适用于我的模型,但我想知道:这是我从LocalBroadcastManager
对象向MainActivity
发送邮件的最佳方式吗?
如果有更有效的方法来做这一切,会是什么?
答案 0 :(得分:0)
你的事情太复杂了。不要为此重写onClick。相反,让您的活动在视图上调用setOnClickHandler,它设置在单击视图时调用的回调。然后使用默认实现。
答案 1 :(得分:-1)
由于你扩展视图,我想你想在布局中使用它。这意味着你可能想为它创建一个Listener。例如:
public class Entry extends View implements View.OnClickListener{
private OnClickListener listener;
public void setListener(OnClickListener listener) {
this.listener = listener;
}
@Override
public void onClick(){
if (this.listener != null) this.listener.onClick(this);
}
}
如何在“活动”中夸大布局并访问自定义视图。
public class MainActivity extends AppCompatActivity{
public void onCreate( ...) {
Entry entry = findViewById(R.id.entry);
entry.setListener(new OnClickListener(...));
}
}