2013-07-03 36 views
1

我开始b活动从活动A.的Android同样的活动结束()

if (model.isPositionClickable(pos)) { 
     Intent intent = new Intent(this, CharacterChooseActivity.class); 
     clickedPosition = pos; 
     startActivityForResult(intent, 0); 
} 

然后导致活动B我做了以下

public class CharacterChooseActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_character_choose); 
} 

public void characterSelected(View v) { 
    Button b = (Button) v; 
    String s = (String) b.getText(); 
    Intent intent = new Intent(); 
    intent.putExtra("character", s); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 



} 

当我开始后第一次点击该按钮时,它将再次开始活动B.如果我在这个新的B活动中第二次点击该按钮,将会再次启动活动B.只有第三次点击才会恢复活动A.

这是为什么? 如何在第一次点击后返回活动A? 我认为这与活动回退堆栈有关,但我不知道如何改变它。

编辑

我已经本地化了这个问题。它与MotionEvent侦听器有关,以及我如何处理点击。

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    final int pos = gv.getCellPosition(event.getX(), event.getY()); 
    int maxPosition = model.getNumberOfColumns() * model.getNumberOfRows(); 
    if (pos >= 0 && pos < maxPosition) { 
     Mode mode = model.getMode(); 
     switch(mode) { 
     case CHAR_SELECT_MODE : inputCharacter(pos); break; 
     case WORD_SELECT_MODE : selectcharacter(event, pos); break; 
     default : break; 
     } 
    }  
    return true;  
} 

private void selectcharacter(MotionEvent event, int pos) { 
    if (event.getActionMasked() != MotionEvent.ACTION_UP) { 
     if(!model.isPositionEnabled(pos)) 
      return; 
     else 
      if(model.isValidPosition(pos)) 
       model.setSelected(pos); 
    } 
    else { 
     model.createWord(); 
    } 
} 

public void inputCharacter(final int pos) { 
    if (model.isPositionClickable(pos)) { 
     Intent intent = new Intent(this, CharacterChooseActivity.class); 
     clickedPosition = pos; 
     startActivityForResult(intent, 0); 
    } 
} 

我需要能够处理不同的事件:OnItemClick和onTouch。

我可以通过向模型添加一个新模式来获得控制器知道它不应该处理触摸事件。

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    final int pos = gv.getCellPosition(event.getX(), event.getY()); 
    int maxPosition = model.getNumberOfColumns() * model.getNumberOfRows(); 
    if (pos >= 0 && pos < maxPosition) { 
     Mode mode = model.getMode(); 
     switch(mode) { 
     case CHAR_SELECT_MODE : inputCharacter(pos); break; 
     case WORD_SELECT_MODE : selectCharacter(event, pos); break; 
     case INPUT_BLOCKED_MODE: break; 
     default : break; 
     } 
    }  
    return true;  
} 

但是我不能让它工作,当我有onItemClick和onTouchListeners。我试图返回false和super.OnTouchEvent(Event)。 OnItemClick事件仍然没有解雇。

+0

尝试在你的CharacterChooseActivity的onCreate中放置一个日志,然后观察它的显示时间。它应该显示3次,正如你所说的,仅在第三次点击时它将恢复活动A_。问题是:当您第一次启动您的活动B时是否显示3个日志,或者是否在您退出活动B时显示它们?如果这是第一个解决方案,考虑发布代码,导致'if(model.isPositionClickable(pos))' – WhiskThimble

+0

好吧,我已经在CharacterChoosActivity的onCreate方法中设置了一个断点。它真的停在那里2次。 PS 日志还显示onCreate被调用两次。 – user1685095

+0

您是否将onClickListener和onTouch应用于同一视图?或者,您是否将onClick应用于您应用onTouch的视图中的某个孩子? – WhiskThimble

回答

0

所以,我不知道如何,我现在不是为什么,但是当我在onTouch()返回false后,OnItemClick被解雇了。 以前我已经这样做了,它以某种方式没有工作......

0

尝试,

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
      //[EDIT: Process only when user takes out his finger i.e on ACTION_UP 
     if(event.getAction()==MotionEvent.ACTION_UP){ 
      //EDIT] 
      final int pos = gv.getCellPosition(event.getX(), event.getY()); 
      int maxPosition = model.getNumberOfColumns() * model.getNumberOfRows(); 
      if (pos >= 0 && pos < maxPosition) { 
       Mode mode = model.getMode(); 
       switch(mode) { 
       case CHAR_SELECT_MODE : inputCharacter(pos); break; 
       case WORD_SELECT_MODE : selectcharacter(event, pos); break; 
       default : break; 
       } 
      }  
      return true; 
     } 

     return super.onTouch(v,event);    
    } 

的Bug代码:会的onTouchEvent触发针对用户不同的操作。即ACTION_DOWN,ACTION_UP,ACTION_MOVE等等。因此,无论何时这些动作触发你开始B.我们只有在用户拿出他的手指时才需要启动B.

+0

不,它不工作。 – user1685095

+0

对不起!我正在返回super.onTouchEvent(..)。请检查编辑的代码。 – Chandan

+0

类型Activity的onTouch(View,MotionEvent)方法未定义。 – user1685095