Android新活动无法启动

时间:2014-06-21 09:32:33

标签: java android android-intent android-activity

我按照Reto Meier的“专业Android 4应用程序开发”的骨架和我的教授的一些幻灯片编写了这段代码,但我无法理解为什么新的活动(PreferencesActivity,完全编码)没有启动而且没有提高任何类型的错误:当我在我创建的标准安卓菜单中按“首选项”时,在VM中它不会做任何事情。 我在app的清单中正确添加了新活动(只是名称,标签,主题和屏幕方向)。

这是代码

public class MainActivity extends Activity implements OnClickListener, OnValueChangeListener {

static final private int MENU_PREFERENCES = Menu.FIRST+1;

...

@Override
    public boolean onCreateOptionsMenu(Menu menu){
        super.onCreateOptionsMenu(menu);
        menu.add(0, MENU_PREFERENCES, Menu.NONE, "Preferences");
        return true;
    }

public boolean onOptionsitemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    switch(item.getItemId()) {
    case (MENU_PREFERENCES): {
        Intent i = new Intent(this, PreferencesActivity.class);
        startActivity(i);
        return true;
        }
    }
    return false;
}
...
}

我得到的唯一奇怪的是Logcat中的这个警告

06-20 14:50:49.760: W InputManagerService(699): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41219950

5 个答案:

答案 0 :(得分:1)

您可以同时使用它们

Intent i = new Intent(getApplicationContext(), PreferencesActivity.class);

Intent i = new Intent(MainActivity.this, PreferencesActivity.class);

但是使用第一个更好,因为在第二个内存泄漏问题可能会出现,并且只是在清单文件中添加此行。

<activity android:name=".PreferencesActivity" />

答案 1 :(得分:0)

您可以使用this代替使用getApplicationContext(),而是获取当前流程的应用程序对象的上下文。

试试这个......

    Intent i = new Intent(getApplicationContext(), PreferencesActivity.class);
    startActivity(i);

这可能会帮助你..

答案 2 :(得分:0)

您的密码:

Intent i = new Intent(this, PreferencesActivity.class);
startActivity(i);
return true;

而不是this,您需要传递MainActivity.this

Intent i = new Intent(MainActivity.this, PreferencesActivity.class);
startActivity(i);
return true;

问题是正确的上下文没有传递所以它没有启动Activity。

答案 3 :(得分:0)

您需要传递MainActivity

  Intent i = new Intent(MainActivity.this, PreferencesActivity.class);
  startActivity(i);
  return true;

最好使用菜单

   @Override
      public boolean onOptionsItemSelected(MenuItem item) {   

       Log.d(TAG, "onOptionsItemSelected()");

      switch (item.getItemId()) {        
   case android.R.id.yourId:            
    finish();      
    return true; 
   case R.id.Yourid:
    return true;
    default:            
    return super.onOptionsItemSelected(item);  

答案 4 :(得分:0)

您也可以写 startActivity(new Intent(getApplicationContext(),NextActivity.class));

在NextActivity.class中输入您的活动名称