1

我已经构建了一个简单的自定义视图并在构造函数中注册了 onClickListener()。要在单击视图实例时启动一个新的 Activity,我只是使用了这样的东西:

setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent(getContext(), com.test.myClass.class);
            Context context = getContext();
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(i);
        }
    });

由于我的知识水平仍然很差,如果这是从 View 开始活动的好方法,我一直在徘徊,如果有一个更好的方法是什么?

谢谢!

4

1 回答 1

4

这个实现是非常有效的,但可以通过两件小事来改进:

YourView extends View{

  private boolean clicked = false;

  private final View.OnClickListener myOnClickListener = 
  new View.OnClickListener(){
    public void onClick(View v) {
        if (!clicked){
            clicked = true;
            Context context = getContext();
            Intent i = new Intent(context, com.test.myClass.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            context.startActivity(i);   
        }
    }
  }


  public View(Context ctx){
    super(ctx);
    setOnClickListener(myOnClickListener);
  }
}

改进如下:如果用户在您的视图上疯狂点击,则可能会OnClickListener触发多次,因此会启动多个 Activity。布尔值修复它。你OnClickListener也总是一样的,尽管你可以在你的视图中声明一次并且不要多次实例化它们。

注意:您可能需要clicked在某个时候设置回 false (onPause()持有您的 View 的 Activity 似乎是一个合理的地方)

于 2012-06-20T22:46:52.807 回答