Arrigo Pierotti
Arrigo Pierotti

Reputation: 203

Android new activity not starting

I wrote this code following the skeleton of Reto Meier's "Professional Android 4 Application Development" and some slide of my professor, but i can't understand why the new activity (PreferencesActivity, fully coded) is not starting and is not raising any kind of errors: in the VM it just won't do anything when i press "Preferences" in the standard android menu I created. I added the new activity in app's manifest correctly (just name, label, theme and screen orientation).

Here's the code

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;
}
...
}

The only strange thing I get is this warning in 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

Upvotes: 3

Views: 10912

Answers (5)

You can also write startActivity(new Intent(getApplicationContext(),NextActivity.class));

write your activity name in NextActivity.class

Upvotes: 0

UsErStackOverFlow
UsErStackOverFlow

Reputation: 33

You need to pass MainActivity

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

Better to use menu

   @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);  

Upvotes: 0

MSR
MSR

Reputation: 533

You can use both of them

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

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

But it's better to use 1st one because in 2nd one memory leakage problem may occour and also just add this line in your manifest file.

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

Upvotes: 1

Pragnesh Ghoda  シ
Pragnesh Ghoda シ

Reputation: 8337

Instead of using this you could use getApplicationContext(), it gets you the context of the application object for the currents process.

Try this....

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

This May Help You..

Upvotes: 0

SilentKiller
SilentKiller

Reputation: 6942

Your Code :

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

Instead of this you need to pass MainActivity.this

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

Issue is Proper context is not passing so its not starting Activity.

Upvotes: 0

Related Questions