我开始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