android:从视图中启动活动的安全方式

时间:2012-06-20 22:30:43

标签: android android-activity android-view

我构建了一个简单的自定义视图,并在构造函数中注册了onClickListener()。要在单击视图实例时启动新活动,我只需使用以下内容:

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开始活动的好方法,我会徘徊,如果有一个更好的方法?

谢谢!

1 个答案:

答案 0 :(得分: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被多次拼写的情况,因此会启动多个活动。布尔值修复它。 此外,您的OnClickListener始终相同,但您只能在View中声明一次,并且不要多次实例化它们。

注意:您可能需要在某个时间点(clickedonPause()设置为false,以保持您的View似乎是一个合理的位置。