Android:触摸事件不起作用

时间:2011-06-15 23:09:14

标签: android touch

这是我的主要活动代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Display display = getWindowManager().getDefaultDisplay();        

    //Setting the FileBrowser FrameLayout Settings.
    FrameLayout fileBrowserLayout =  (FrameLayout) findViewById(R.id.flFBrowser);
    FrameLayout previewLayout = (FrameLayout) findViewById(R.id.flPreview);
    TextView instructions = (TextView)findViewById(R.id.tvInstructions);

    fileBrowserLayout.getLayoutParams().width = display.getWidth()*WidthFileBrowser/100;
    previewLayout.getLayoutParams().width = display.getWidth()*WidthPreview/100;
    previewLayout.getLayoutParams().height = display.getHeight()*PreviewHeight/100;
    instructions.getLayoutParams().width = display.getWidth()*WidthPreview/100;
    instructions.getLayoutParams().height = display.getHeight()*InstructionsHeight/100;
    instructions.setText(Instructions);
    instructions.setTextSize(InstructionTextSize);
    instructions.setTextColor(InstructionTextColor);
    instructions.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
    instructions.setGravity(Gravity.CENTER_HORIZONTAL);

    //Attempting to set the Fragment        
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();       
    FileBrowser fb = new FileBrowser();
    preview = new Preview();
    ft.add(R.id.flFBrowser,fb);
    ft.add(R.id.flPreview, preview);
    ft.commit();

}

然后这是我的预览片段代码

public class Preview extends Fragment implements ViewFactory,OnTouchListener{

@Override
public boolean onTouch(View v, MotionEvent event) {
    System.err.println("Something touched me!");
    return true;
}
}

onActivityStarted上有更多的初始化代码,但它与初始化图像处理器有关。

但是我无法弄清楚为什么我的触摸事件没有注册。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

问题是您实际上没有注册onTouchListener课程中实施的Preview。我不知道,我不认为(基于API)你可以为Fragments注册一个触摸监听器,但你可以为你拥有的任何视图。

尝试为其中一个FrameLayouts注册onTouchListener。您可以在初始化预览对象后执行此操作:

preview = new Preview();
previewLayout.setOnTouchListener(preview);

这应该可以解决问题。

答案 1 :(得分:0)

就我而言,我有孩子在拦截触摸事件。我想将一个识别器附加到父布局,所以要做到这一点,我需要拦截触摸事件(http://developer.android.com/training/gestures/viewgroup.html#intercept)。我必须对布局进行子类化并覆盖onInterceptTouchEvent()以将事件传递给我可能附加到布局的任何触摸侦听器。我在一个片段中实现了我的监听器和检测器,监听器将事件转发给检测器。