2014-01-06 61 views
0

我有一个片段可以扩展自定义视图。为片段创建自定义onClickListner

目前在使用的用户点击它视图更新视图的

public boolean onTouchEvent(MotionEvent event) {... } 

不过,我也想更新的时候有一个MotionEvent该片段展示。不建议从自定义视图像内做访问FragmentManager

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"); 
} 

似乎凌乱和全坑瀑布。我可以看到,对于扩展ListFragment的片段,有一个public void onListItemClick(ListView l, View v, int position, long id)可以让你创建一个回调函数,有没有办法让它为标准片段工作?

UPDATE:

对于那些有兴趣,解决的办法是把一个onClickListener的片段onCreateView类似:

  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();onTouchEvent一个clickEvent。因此,将调用视图s onTouchEvent`,这将触发后续的clickEvent,这将触发片段中定义的处理程序。

+0

Invisible Button作为片段的背景?您需要将基础布局设置为RelativeLayout,并将其他小部件放置在不可见按钮的顶部。 –

+0

在您的活动中实现自定义界面,并将界面的引用传递给需要它的活动。 – dm78

回答

0

尝试在父活动或片段中处理此逻辑。作为一般规则,片段不应该知道他们的父母。例如,您可以执行以下操作:

  1. 在布局中有布局的父级活动,并带有片段。
  2. 在布局上设置onClickListener,根据需要连接和分离碎片。

这样,父级活动可以处理它在顶层所需的任何内容,而且这些片段永远不需要知道。如果你需要做这个片段切换,但希望它在另一个片段内,你可以做同样的事情。请注意,您必须以编程方式添加嵌套片段,因为不支持xml嵌套片段。请参阅this for a fragment switching code example

+0

我试图在片段中创建一个Listener接口并使活动实现此接口。但是,Listener无法触发。我会在这里玩的建议... – avrono

+0

我试图让活动和setOnClickListener的'onCreate'视图到一个私人匿名onclicklistener,但这似乎并没有被调用.... – avrono

+0

好吧,我解决了我需要从'onTouchEvent'调用'performClick'来触发一个点击事件(显然是由'onTouchEvent'捕获的) – avrono