내 첫 번째 Android 앱을 개발하는 동안 새로운 활동을 시작하는 3 가지 방법을 생각해 냈습니다. (아마도 더 많은 것을 알지 못합니다.) 서로 다르거나 기본적으로 작동하는지 이해할 수 없습니다. 같은 방식으로.Android에서 새로운 활동을 시작하는 적절한 방법은 무엇입니까?
예를 들어 메뉴가있는 MainActivity
입니다 (ActionBar 구성 요소이지만 메뉴처럼 작동합니다). 메뉴에는 AboutActivity
을 열 수있는 옵션이 있습니다.
내 첫 번째 방법이 있었다 :
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = (ActionBar)findViewById(R.id.actionbar);
getMenuInflater().inflate(R.menu.actionbar_main, actionBar.asMenu());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.actionbar_item_home:
item.setIntent(new Intent(this, AboutActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
세 번째 접근 방법 : 코드 구성을 단순화하기 위해
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = (ActionBar)findViewById(R.id.actionbar);
getMenuInflater().inflate(R.menu.actionbar_main, actionBar.asMenu());
actionBar.findAction(R.id.actionbar_item_home).setIntent(new Intent(this, AboutActivity.class));
}
}
내 두 번째 방법을, 나는이 같은 자신의 방법에있는 모든 메뉴 항목 선택을 처리 시작 이전의 코드와 매우 유사합니다. 코드 행에있는 유일한 코드는 AboutActivity
입니다. 대신에 :
item.setIntent(new Intent(this, AboutActivity.class));
나는 변경 :
startActivity(new Intent(this, AboutActivity.class));
그러나 이것은 나에게이 문제를 처리하기 위해 적절한 방법을 생각하고 있어요. 내 질문 :
- 접근 방식 # 2와 # 3 사이에는 차이점이 있습니까? 내가 보는 방식으로,
setIntent
은 기본적으로 항목이 선택 될 때마다 메뉴 항목 인 텐트를 정의합니다. 내가 뭘한다고 생각하니 나쁜 짓이야? 반면startActivity
그냥 않습니다. 그러나 다시 한 번 항목이 선택 될 때마다 새로운 의도가 만들어져 다음 질문으로 이어집니다. - 접근법 # 1에서 나는 그 이슈가 없지만, 의도는 활동의
onCreate
(활동이 파괴되지 않는다면) 한 번만 생성됩니다. 그러나 성능/메모리 현명 (또는 관련성이있는 다른 것)은 다음과 같은 점에서 차이가 있습니까?- A), 지금
onOptionsItemSelected
메뉴 핸들러
- A), 지금
- 에서 활동을 시작 텍스트 필드는
AboutActivity
에 가정)을onCreate
방법 - B에 한 번 의도를 설정합니다. 메뉴 항목을 누르고 활동을 열고 텍스트 필드에 아무 것도 입력 한 다음 뒤로 이동하고 메뉴 항목을 다시 누르면 텍스트가 사라집니다. 나는 활동 상태가 지속되고 텍스트 필드가 채워질 것이라는 의도를 한 번만 (접근 # 1) 만들었지 만. 하지만 그렇지 않습니다. 다른 모든 접근 방식과 똑같이 작동하기 때문에 더 혼란 스럽습니다. 그들 사이의 차이점은 무엇입니까?
'onCreateOptionsMenu'를 사용하고있는 작업 표시 줄 구성 요소로 작업 할 수 없습니다. 이 메서드는 결코 호출되지 않습니다 ... –
방금 목적을 이길 장치에 메뉴를 누르면 메서드가 호출됩니다 깨달 았어. 앞으로는 기존 메뉴가 필요할 것이므로 사용할 수 없습니다. 나는 접근 # 1에 가야만한다고 생각한다. –