startActivityForResults会干扰onTouchListener

时间:2014-06-11 01:24:10

标签: java android android-intent

我是Java编程的新手,但已经用其他语言编程了。我遇到的问题是我认为在从新意图返回时失去视角焦点。

我第一次跑步时想要收集用户的信息,所以我做了

    Intent myIntent = new Intent(getApplicationContext(), UserInformation.class);
    startActivityForResult(myIntent, UserInformationRequest);

这很好用。我跳转到意图,收集数据并返回onActivityResult。 在那里我想显示主屏幕并让用户移动图像,所以我设置了onTouchListener

 @Override
  public void onActivityResult(int iRequestCode, int iResultCode, Intent UserInformationData)
   {
    super.onActivityResult(iRequestCode, iResultCode, UserInformationData); 

    switch(iRequestCode)
     {
      case UserInformationRequest: setContentView(R.layout.main);
                                   doMoving();                                 
     }
   }


  public void doMoving()
    {
       ivImage =(ImageView) findViewById(R.id.image);
       ivImage.setOnTouchListener(this);  
   }


  @Override
  public boolean onTouch(View View, MotionEvent event)
   {
    final int X = (int) event.getRawX();
    final int Y = (int) event.getRawY();

    switch (event.getAction() & MotionEvent.ACTION_MASK)
     {
      case MotionEvent.ACTION_DOWN: _xDelta = (int) (X - ivImage.getTranslationX());
                                    _yDelta = (int) (Y - ivImage.getTranslationY());

                                    ivHomeImage.setVisibility(View.VISIBLE);
      break;

      case MotionEvent.ACTION_UP: ivHomeImage.setVisibility(View.INVISIBLE);
      break;

      case MotionEvent.ACTION_POINTER_DOWN:
      break;

      case MotionEvent.ACTION_POINTER_UP:
      break;

      case MotionEvent.ACTION_MOVE: ivImage.setTranslationX(X - _xDelta);
                                    ivImage.setTranslationY(Y - _yDelta);
      break;
     }
    return true;
   }
 }

这不起作用。如果我跳过调用intent并直接转到onTouchListener,则可以移动图像。

我已经理解为什么调用Intent并返回会让我的MainActivity破坏。

1 个答案:

答案 0 :(得分:1)

您正在使用setcontentview两次。这样做将要求您再次初始化按钮等大部分内容。这不是一个好习惯。建议您只在活动中使用一次和onCreate方法。删除这一行:

setContentView(R.layout.main);//on onActivityResult