2016-07-08 3 views
-3

두 개의 서로 다른 활동이 있는데 두 가지 모두 동일한 도구 모음을 사용하여 동일한 레이아웃과 메뉴 옵션을 사용합니다. 이 부분은 문제가되지 않습니다.Android Studio의 툴바 기능에 별도의 클래스 사용?

특정 기능을 실행하는 메뉴 옵션을 원한다면 자연스럽게 foo() 함수를 만들고 메뉴 옵션을 선택하면 호출합니다. onOptionsItemSelected(MenuItem item) 메서드는 각 acitivity에서 개별적으로 처리했기 때문에 정적 "도구 모음 함수"가있는 별도의 클래스를 사용하는 것이 좋습니다. 예 : 도구 모음의 드롭 다운 메뉴에서 어떤 활동에서든지 logout() 기능에 액세스 할 수 있습니다.

그러나 명백한 것처럼 보일 수 있지만 문제에 대한 "우수 사례"를 찾을 수 없습니다. 그렇다면 동일한 "툴바 기능"을 호출하는 여러 액티비티를 처리하는 가장 좋은 방법은 무엇입니까?

예제 코드 : MainActivitySecondActivity에는 모두 동일한 툴바가 있습니다. 두 onCreate() 방법에서 다음 acitivites의 모두에서 다른

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

어딘가에 :

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.item_foo: 
      ToolbarFunctions.foo(); //Is this a good way to do it? 
     default: 
      break; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

예 .. 할 수 있습니다 .. !! –

+0

'android'와'android studio '사이에 차이가없는 사람이 있습니다. –

답변

0

우수 사례 주된 활동 클래스를 사용하고 다른 모든 활동을 확장합니다. 다음은 부모 활동의 몇 가지 예입니다.

public abstract class MyParentActivity extends Activity { 

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

// This is your abstract function for other activity! 
public void foo(); 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.item_foo: 
      foo(); //Is this a good way to do it? Yes, here it's okey! 
     default: 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
    } 
} 

따라서 MyParentActivity에서 다음 코드로 확장되는 활동을 정의 할 수 있습니다. 그게 전부입니다 :

public class MyOtherActivity extends MyParentActivity { 

    // Here your function will be called in every time 
    // when you click to Toolbar buttons! 
    // 
    // And you don't need write again about clicking menu! 

    @Ovveride 
    public void foo() { 

    //Any your behaviour 

    } 

} 
+0

니스. 메뉴에서 하나의 액티비티에 추가 옵션을 사용하려면'onOptionsItemSelected()'메소드를 덮어 쓰겠습니까? 아니면 해당 액티비티에 대해 별도의 툴바를 만들어야합니까? – blae

+0

@blae 예, 원하는 동작을 무시할 수있는 것보다, 특별한 동작을 위해 ... – GensaGames

0

당신은 BaseActivity 클래스를 정의 할 수 있으며 BaseActivity에서 다른 모든 활동을 확장 할 수 있습니다. BaseActivity에 공통 부분을 포함시킵니다.

0

경우 foo는() 함수는 논리없이보기 논리가, 다음 빠르고 단위 테스트 할 수있을 것입니다 정적 class.It에 보관하는 것이 좋습니다. BaseActivity 예제와 비교하여 뷰 로직이 있다면. 그것은 함께 볼 수있는 기능 논리를 가지고있을 수 있습니다 정적 및 또한 귀하의보기 업데이 트에 대한 메서드와 인터페이스를 구현해야 BaseActivity를 확장하는 것이 좋습니다 수 있습니다. 당신이 당신에게 정적 foo() 메서드를 전달할 것입니다 인터페이스는 기능 논리를 할 것입니다 인터페이스와 함께 호출 된 활동으로 리턴하여 활동이 자체보기로 갱신하도록합니다. 여전히 foo() 메소드를 단위 테스트 할 수 있습니다.

public interface FooInterface{ 
    void onFooDone(Foo foo); 
} 

public static void foo(FooInterface fooInterface){ 
calculate... 
    if(fooInterface!=null) 
    fooInterface.onFooDone(fooObject); 
} 

귀하의 활동 (이) FooInterface 를 구현하고 foo는 호출해야합니다;