2011-07-04 3 views
2

...이 그 초보자 질문 중 하나가 될 것입니다 100 % 확신하지만, 여기 간다 앱에서 사용할 수있는 메소드는 무엇입니까?

내가 한 활동 방법을 작성하고에서 액세스 할 수있는 방법이 있나요 다른 사람?

예 : 내 응용 프로그램에서 여섯 명하는 행동이이 , 그 자체 menu.xml 각 각에 대해 사용할 수있는 옵션이 다를 수해야하기 때문에, 그림과 같이 나는이 메뉴를 설정 & 메뉴 아이템이 있습니다

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.calculator_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     //Handle item selection 
     switch (item.getItemId()) { 
     case R.id.menuItem_calculator_Help: 
      helpDialogGo(); 
      return true; 
     case R.id.menuItem_calculator_Settings: 
      //settingsActivityGo(); 
      return true; 
     case R.id.menuItem_calculator_Share: 
      shareGo(); 
      return true; 
     case android.R.id.home: 
      // app icon in Action Bar clicked; go home 
      Intent uptohome = new Intent(this, Main.class); 
      uptohome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(uptohome); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

다음은 이러한 방법 중 하나의 예입니다

private void helpDialogGo() { 
     Toast.makeText(this, "help", Toast.LENGTH_LONG).show(); 
     AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); 
     alt_bld.setMessage("Sorry, no help has been written since this application is still in development. This is a prerelease version.") 
     .setCancelable(false) 
     .setPositiveButton("Cool", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
     // Action for 'Yes' Button 
     dialog.cancel(); 
     } 
     }) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
     // Action for 'NO' Button 
     dialog.cancel(); 
     } 
     }); 
     AlertDialog alert = alt_bld.create(); 
     // Title for AlertDialog 
     alert.setTitle("Pixel Help"); 
     // Icon for AlertDialog 
     alert.setIcon(R.drawable.question); 
     alert.show(); 
    } 

그래서 피하기 위해로서, 모든 활동에서 공유이 사용자 정의 방법이 있고 버튼이 그들 각각에 눌렀을 때 실행하는 방법은 무엇입니까 거대한 amoun를 가지고있는 t의 코드가 내 앱에서 복제 되었습니까?

그렇다면 내가 쳤을 수있는 움푹 들어간 곳이 있습니까? (일부 메뉴 항목은 대화 상자를 가져오고 다른 사용자는 새로운 활동으로 사용자를 이동시킵니다.)

답변

2

모든 활동에 비슷한 menuitem이 있습니까? 즉 항목 수가 동일하지만 행동이 서로 다른가요? 그렇다면 ... onCreateOptionsMenu 및 onOptionsItemSelected() 메소드를 대체하는 BaseActivity를 작성하는 방법은 무엇입니까? (위 예제에서 제공 한대로). 모든 액티비티는이 BaseActivity에서 상속 받아 메뉴 처리 방법을 재정의해야합니다. 예. helpDialogGo()가 새 클래스로 이동합니다.

BaseActivity에는 onCreateOptionsMenu 및 onOptionsItemSelected() 메소드가 있습니다. 빈 메뉴로 모든 menuItem 액션 (예 : helpDialogGo() 등)을 추가합니다. 상속 된 클래스는 menuItem 액션을 덮어 씁니다.

각 작업에서 menuitem이 유사하지 않은 경우 각 작업에 대한 메뉴를 만드는 것이 좋습니다.

편집 :

회원님이 더 기대해야합니다. 나는 그것을 분명하게 생각했다. 내가 다시 시도하자.

클래스 BaseActivityActivity입니다.

BaseActivity extends Activity { 

    // Copy your onCreateOptionsMenu() and onOptionsItemSelected() methods here 

    protected void helpDialogGo() { } 

    // ... other methods 
} 

클래스 MyActivity1BaseActivity를 확장합니다.

MyActivity1 extends BaseActivity { 

    // Copy your helpDialogGo() code in full here and then make 
    // any specific changes to menu behaviour based on activity. 

} 

클래스 MyActivity2

MyActivity2 extends BaseActivity { 
    // Copy your helpDialogGo() code in full here and then make 
    // any specific changes to menu behaviour based on activity. 
} 
+0

이것은 실제로 이렇게하는 일반적인 방법입니다. 그리고 안드로이드에만 국한된 것은 아니지만 클래스 디자인에 대한 모범 사례와 더 관련이 있습니다. – omermuhammed

+0

제가 시작하기 전에 좀 더 자세히 설명해 주실 수 있습니까? – rabbitt

+0

@omermuhammed가 이에 동의합니다. rabs83 @ – GSree

1

물론 원하는 기능을 캡슐화하는 몇 가지 사용자 정의 클래스를 작성하여 활동. 구현을 활동 자체에 직접적으로 배치하는 것 (모든 것이 동일하고 지금까지 설명한 내용을 기반으로 함)보다 더 나은 추상화입니다.

언제든지 자신이 임베디드 코드를 복제한다는 것을 알게되면, 이것은 흔히 그 코드를 자신의 클래스로 옮길 수있는 좋은 장소입니다.

+0

좋아 BaseActivity를 확장, 그래서 좋은 생각을 _is_? 이제 어떻게해야합니까?각 메소드가있는 새로운 클래스 하나 또는 그 안에 모두 포함 된 클래스? 나는 그것이 많이 묻는 것을 알고있다. 그러나 샘플 코드는 훌륭합니다. 당신의 도움을 주셔서 감사합니다! – rabbitt

관련 문제