2013-03-27 75 views
1

我对Android开发非常陌生。哪里声明onOptionsItemSelected全球使用?

在我MainActivity.java文件,我已经声明的onOptionsItemSelected(MenuItem menu)方法,它允许用户将当前页面MainActivity.java和另一页我创建了名为Settings.java之间跳转。

当用户转到Settings.java页面,并且他们点击菜单中的Home选项时,没有任何反应。我知道这是因为onOptionsItemSelected(MenuItem menu)仅在MainActivity.java类中定义,而不在Settings.java类中定义。

我现在通过将onOptionsItemSelected(MenuItem menu)MainActivity.java复制到Settings.java来克服这个问题。但这是非常多余的。

我应该在哪里声明可以在不同类中重用的方法?

MainActivity.java

public class MainActivity extends Activity { 
    ... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       showMsg("Settings Clicked"); 
       this.startActivity(new Intent(this, Settings.class)); 
       return true; 
      case R.id.action_home: 
       showMsg("Home clicked"); 
       this.startActivity(new Intent(this, MainActivity.class)); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    private void showMsg(String msg) { 
     Toast toast = Toast.makeText(this.getBaseContext(), msg, Toast.LENGTH_LONG); 
     toast.show(); 
    } 
} 

Settings.java

public class Settings extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settings); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       this.startActivity(new Intent(this, Settings.class)); 
       return true; 
      case R.id.action_home: 
       this.startActivity(new Intent(this, MainActivity.class)); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

回答

2

如果您创建活动名为BaseActivity有您共同onOptionsItemSelected()代码,然后扩展这个类来创建MainActivitySettings这两个班级将使用super班'(我.E。 BaseActivity's)onOptionsItemSelected()

另一种方法是切换到碎片,因为碎片使用主机活动的onOptionsItemSelected()以及他们自己的。这两种策略都允许您使用“集中式”代码,而不必维护多个“剪切和粘贴”副本。

+0

谢谢。我结束了使用'BaseActivity'选项。我会在不久的将来看看碎片。 – FilmiHero 2013-03-27 18:23:31