2011-09-21 8 views
0

내 첫 번째 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)); 

그러나 이것은 나에게이 문제를 처리하기 위해 적절한 방법을 생각하고 있어요. 내 질문 :

  1. 접근 방식 # 2와 # 3 사이에는 차이점이 있습니까? 내가 보는 방식으로, setIntent은 기본적으로 항목이 선택 될 때마다 메뉴 항목 인 텐트를 정의합니다. 내가 뭘한다고 생각하니 나쁜 짓이야? 반면 startActivity 그냥 않습니다. 그러나 다시 한 번 항목이 선택 될 때마다 새로운 의도가 만들어져 다음 질문으로 이어집니다.
  2. 접근법 # 1에서 나는 그 이슈가 없지만, 의도는 활동의 onCreate (활동이 파괴되지 않는다면) 한 번만 생성됩니다. 그러나 성능/메모리 현명 (또는 관련성이있는 다른 것)은 다음과 같은 점에서 차이가 있습니까?
    • A), 지금 onOptionsItemSelected 메뉴 핸들러
  3. 에서 활동을 시작 텍스트 필드는 AboutActivity에 가정)을 onCreate 방법
  4. B에 한 번 의도를 설정합니다. 메뉴 항목을 누르고 활동을 열고 텍스트 필드에 아무 것도 입력 한 다음 뒤로 이동하고 메뉴 항목을 다시 누르면 텍스트가 사라집니다. 나는 활동 상태가 지속되고 텍스트 필드가 채워질 것이라는 의도를 한 번만 (접근 # 1) 만들었지 만. 하지만 그렇지 않습니다. 다른 모든 접근 방식과 똑같이 작동하기 때문에 더 혼란 스럽습니다. 그들 사이의 차이점은 무엇입니까?

답변

0

2는 낭비입니다. 왜냐하면 당신이 말한 것처럼 그것이 호출 될 때마다 그 의도를 만들어 내기 때문입니다. 이러한 메소드가 많이 호출되지 않기 때문에 끔찍한 낭비는 아니지만 최상의 방법은 아닙니다.

옵션 1과 같은 작업을 더 나은 위치에서 수행하려는 경우 onCreateOptionsMenu()가 최선의 선택입니다.

"메뉴"는 활동을 시작하기위한 특별한 경우입니다. 일반적으로 startActivity를 호출 할 때마다 # 3과 같은 작업을 수행합니다. 메뉴의 setIntent는 막 뒤에서 그렇게합니다.

XML을 통해이를 수행 할 방법이 있다고 생각합니다. 그러나 나는 확실히 알아 내지 못하고있다.

+0

'onCreateOptionsMenu'를 사용하고있는 작업 표시 줄 구성 요소로 작업 할 수 없습니다. 이 메서드는 결코 호출되지 않습니다 ... –

+0

방금 ​​목적을 이길 장치에 메뉴를 누르면 메서드가 호출됩니다 깨달 았어. 앞으로는 기존 메뉴가 필요할 것이므로 사용할 수 없습니다. 나는 접근 # 1에 가야만한다고 생각한다. –

관련 문제