我有一个片段,它会自定义视图。
目前,当用户使用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,它将触发片段中定义的处理程序。
答案 0 :(得分:0)
尝试在父活动或片段中处理此逻辑。作为一般规则,片段不应该知道他们的父母。例如,您可以执行以下操作:
这样,父活动可以处理顶级所需的任何内容,并且片段永远不需要知道。如果你需要进行这个片段切换,但希望它在另一个片段中,你可以做同样的事情。请注意,必须以编程方式添加嵌套片段,因为不支持xml嵌套片段。见this for a fragment switching code example。