为片段创建自定义onClickListener

时间:2014-01-06 20:43:16

标签: android android-fragments

我有一个片段,它会自定义视图。

目前,当用户使用View的

点击视图时,视图会更新
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的Fragment,有一个public void onListItemClick(ListView l, View v, int position, long id)允许一个人创建一个回调,无论如何让这个为标准片段工作?

更新:

对于那些感兴趣的人,解决方案是在片段onCreateView中放置一个onClickListener,如:

            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;

还可以在视图onTouchEvent的{​​{1}}中生成clickEvent。因此,将调用视图this.performClick(); onTouchEvent`,这将触发后续的clickEvent,它将触发片段中定义的处理程序。

1 个答案:

答案 0 :(得分:0)

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

  1. 具有布局的父活动,布局中包含片段。
  2. 在布局上设置onClickListener,根据需要附加和分离片段。
  3. 这样,父活动可以处理顶级所需的任何内容,并且片段永远不需要知道。如果你需要进行这个片段切换,但希望它在另一个片段中,你可以做同样的事情。请注意,必须以编程方式添加嵌套片段,因为不支持xml嵌套片段。见this for a fragment switching code example