覆盖自定义视图中的空方法并在 MainActivity 中处理它
Posted
技术标签:
【中文标题】覆盖自定义视图中的空方法并在 MainActivity 中处理它【英文标题】:override empty method in custom view and handle it in MainActivity 【发布时间】:2016-04-23 20:18:31 【问题描述】:为了简单起见,我制作了一个自定义日历视图 (RelativeLayout)。事件(linearLayouts)被放置在其中。当我单击事件时,我希望能够做某事,但我希望在我的 MainActivity 中完成这件事。换句话说,我想在我的自定义视图中覆盖空方法并在我的 MainActivity 中处理它。
eventView.setTag(event.getDatabaseId());
eventView.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Log.d("test", "" + v.getTag());
onEventClick((int) v.getTag());
);
eventView.setOnLongClickListener(new OnLongClickListener()
@Override
public boolean onLongClick(View v)
onEventLongClick((int) v.getTag());
return false;
);
...
public void onEventClick(int eventId)
public void onEventLongClick(int eventId)
所以在我的 MainActivity 中我实例化了我的视图:
cv = ((CalendarView)findViewById(R.id.calendar_view));
我想做这样的事情:
cv = ((CalendarView)findViewById(R.id.calendar_view))
@Override
public void onEventClick(int eventId)
// here I will fetch the data and display a dialog
@Override
public void onEventLongClick(int eventId)
// here I will fetch the data and display a dialog
;
我希望能够在其他地方使用我的日历,所以这就是为什么我不想将点击功能绑定到我的自定义视图中
我尝试将我的观点抽象化,但也无济于事。
编辑:eventView 位于 viewpager 中
【问题讨论】:
我认为你做不到。 findViewById 返回一个视图,你不能从它上面创建一个匿名类 哦,我知道,这只是一个演示,表明我想以某种方式将它带到 MainActivity 你能展示你完整的自定义视图类吗?我假设您可以定义自己的接口并将其作为参数传递给另一个类 我会,但它就像 600 行。我认为下面的答案会解决它,但谢谢! 是的,下面的方法是推荐的方法。我以为你已经这样做了,这就是我想看课程的原因 【参考方案1】:您应该在自定义视图上使用Interface
。
在其最常见的形式中,接口是一组具有空主体的相关方法。你可以找到更详细的说明here
所以在你的情况下,我假设你有一个 RelativeLayout
作为你的自定义视图
public class MyCalendarLayout extends RelativeLayouts
//Your constructor methods
public interface MyEventListener
public void onEventClicked();
public void onEventLongClicked();
private MyEventListener myEventListener;
public void setListener(MyEventListener myEventListener)
this.myEventListener= myEventListener;
然后在你的Activity
上你可以这样使用它
myCustomView.setListener(new MyEventListener()
@Override
public void onEventClicked()
// TODO Auto-generated method stub
@Override
public void onEventLongClicked()
// TODO Auto-generated method stub
);
或者你可以使用
YourActivity extends Activity implements MyEventListener
你可以打电话
myCustomView.setListener(this);
在您的活动上,并让句柄覆盖您的活动的方法。
【讨论】:
如果您有任何问题,请告诉我以上是关于覆盖自定义视图中的空方法并在 MainActivity 中处理它的主要内容,如果未能解决你的问题,请参考以下文章