2013-07-03 77 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