Android 为片段创建自定义onClickListner
我有一个片段,它膨胀了一个自定义视图 当前,当用户使用视图的Android 为片段创建自定义onClickListner,android,android-fragments,Android,Android Fragments,我有一个片段,它膨胀了一个自定义视图 当前,当用户使用视图的 public boolean onTouchEvent(MotionEvent event) {... } 但是,我还想更新在出现MotionEvent时显示的片段。不建议从自定义视图中访问碎片管理器,并执行以下操作: try{ Activity a = (Activity) context; FragmentManager fm = a.getFragmentManager(); // Use the fragment
public boolean onTouchEvent(MotionEvent event) {... }
但是,我还想更新在出现MotionEvent时显示的片段。不建议从自定义视图中访问碎片管理器
,并执行以下操作:
try{
Activity a = (Activity) context;
FragmentManager fm = a.getFragmentManager();
// Use the fragment manager
} catch (ClassCastException e) {
Log.d(TAG, "Can't get the fragment manager with this");
}
View canvasView = inflater.inflate(R.layout.canvas_view , container, false);
ComposeView myView = (ComposeView) canvasView.findViewById(R.id.myDrawView2);
myView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view) {
Log.d("FRAG", "OnClick Called");
showNumericInput();
}
});
return canvasView;
看起来很凌乱,到处都是陷坑。我可以看到,对于扩展ListFragment的片段,有一个public void onListItemClick(ListView l,View v,int position,long id)
,它允许创建一个回调,对于一个标准片段,有没有办法让它工作
更新:
对于那些感兴趣的人,解决方案是在片段onCreateView
中放置一个onClickListener,类似于:
try{
Activity a = (Activity) context;
FragmentManager fm = a.getFragmentManager();
// Use the fragment manager
} catch (ClassCastException e) {
Log.d(TAG, "Can't get the fragment manager with this");
}
View canvasView = inflater.inflate(R.layout.canvas_view , container, false);
ComposeView myView = (ComposeView) canvasView.findViewById(R.id.myDrawView2);
myView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view) {
Log.d("FRAG", "OnClick Called");
showNumericInput();
}
});
return canvasView;
还可以在视图
this.performClick()的ontochevent
中生成clickEvent代码>。因此,将调用视图s
onTouchEvent',这将触发后续的clickEvent,该事件将触发片段中定义的处理程序。尝试在父活动或片段中处理此逻辑。一般来说,碎片不应该知道他们的父母。例如,您可以执行以下操作:
有一个布局为的父活动,布局中有一个片段李>
在布局上设置onClickListener,根据需要附加和分离片段李>
这样,父活动就可以在顶层处理它需要处理的任何事情,而片段永远不需要知道。如果您需要切换这个片段,但希望它位于另一个片段中,那么您也可以这样做。请注意,必须以编程方式添加嵌套片段,因为不支持xml嵌套片段。看 不可见按钮作为碎片的背景?您需要将基本布局设置为RelativeLayout,并将其他小部件放置在不可见按钮的顶部。在活动中实现自定义接口,并将对接口的引用传递给需要它的活动。我尝试在片段中创建侦听器接口,并使活动实现此接口。但是,无法触发侦听器。我将在这里讨论这些建议…我试图将活动和setOnClickListener的onCreate
中的视图获取给一个私有匿名onclicklistener,但它似乎没有被调用…好的,我解决了我需要从onTouchEvent
调用performClick
来触发单击事件的问题(显然是由onTouchEvent
捕获的)好的,它工作正常吗?或者,除非您在onTouchEvent()中执行其他操作,否则您可以停止重写onTouchEvent(),只使用onClickListeners。根据返回的内容,onTouchEvent()将消耗事件,使其永远不会到达侦听器。