我開始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事件仍然沒有解僱。
嘗試在你的CharacterChooseActivity的onCreate中放置一個日誌,然後觀察它的顯示時間。它應該顯示3次,正如你所說的,僅在第三次點擊時它將恢復活動A_。問題是:當您第一次啓動您的活動B時是否顯示3個日誌,或者是否在您退出活動B時顯示它們?如果這是第一個解決方案,考慮發佈代碼,導致'if(model.isPositionClickable(pos))' – WhiskThimble
好吧,我已經在CharacterChoosActivity的onCreate方法中設置了一個斷點。它真的停在那裏2次。 PS 日誌還顯示onCreate被調用兩次。 – user1685095
您是否將onClickListener和onTouch應用於同一視圖?或者,您是否將onClick應用於您應用onTouch的視圖中的某個孩子? – WhiskThimble