if (model.isPositionClickable(pos)) {
Intent intent = new Intent(this, CharacterChooseActivity.class);
clickedPosition = pos;
startActivityForResult(intent, 0);
}
그런 활동 A.에서 결과를 활동 B를 시작하고 활동 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로 돌아가는 방법은 무엇입니까? 이것은 활동 백 스택과 관련이 있다고 생각하지만 변경 방법을 모르겠습니다.
수정
문제를 현지화했습니다. 그것은 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에 로그를 기록한 다음 표시됩니다. 세 번 클릭 만하면 A_ 활동이 재개됩니다. 질문은 : 활동 B를 처음 시작할 때 3 개의 로그가 모두 표시되는지 아니면 활동 B를 종료 할 때 표시되는지 여부입니다. 이것이 첫 번째 해결책이라면,'if (model.isPositionClickable (pos)) '로 이어지는 코드를 게시하는 것을 고려해보십시오. – WhiskThimble
글쎄, CharacterChoosActivity의 onCreate 메소드에서 중단 점을 살펴 보았습니다. 그리고 실제로 2 번 그곳에서 멈 춥니 다. PS 또한 oncreate가 두 번 호출되었다는 것을 보여주는 로그가 있습니다. – user1685095
onClickListener와 onTouch를 같은 뷰에 적용합니까? 또는 onTouch를 적용한 뷰의 자식에게 onClick을 적용 하시겠습니까? – WhiskThimble