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()将消耗事件,使其永远不会到达侦听器。