Search code examples
javaandroidandroid-studioandroid-layoutandroid-toolbar

Why does the help button in my toolbar is not working


When I click the Help the app is suddenly not responding. I added some toolbar with the application the about is working fine but it comes the help button the app suddenly stops.

Here's my code mainactivity code

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detection);
    //this hides the back button and I thank you
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
    mProgressDialog = new ProgressDialog(this);
    mProgressDialog.setTitle(getString(R.string.progress_dialog_title));

    // Disable button "detect" as the image to detect is not selected.
    setDetectButtonEnabledStatus(false);

    LogHelper.clearDetectionLog();
}

   

     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu, menu);
        return true;
    }
        @SuppressLint("NonConstantResourceId")
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
    
            switch(item.getItemId()){
                case R.id.menuAbout:
   
                    View messageView = getLayoutInflater().inflate(R.layout.about, null, false);
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setIcon(R.drawable.smile);
                    builder.setTitle(R.string.app_name);
                    builder.setView(messageView);
                    builder.create();
                    builder.show();
                    break;
    
                case R.id.menuHelp:
                  
                    Intent help = new Intent(this, HelpActivity.class);
                    startActivity(help);
                    break;
    
    
            }
            return true;
        }

then this is the helpactivity code

    public class HelpActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_help);
        getSupportActionBar().hide();

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


        ActionBar bar = getSupportActionBar();
        bar.setDisplayHomeAsUpEnabled(true);
        bar.setTitle(R.string.help);
    }
}

then here's the xml for menu

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuHelp"
        android:title="Help"
        android:icon="@drawable/ic_help_black_24dp"/>

    <item
        android:id="@+id/menuAbout"
        android:title="About"
        android:icon="@drawable/ic_info_black_24dp"/>
  <!--  <item
        android:id="@+id/menuLogout"
        android:title="Logout" /> -->

</menu>

then this is the xml for activity_help

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.HelpActivity">



    <TextView
        android:id="@+id/help_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/help_tip"
        android:textSize="17sp"
        android:textColor="@android:color/black"
        android:layout_margin="10dp"
       />

</RelativeLayout>

What should I do? Please do help me. Thanks

This is the help button


Solution

  • case R.id.menuHelp:
                       // Toast.makeText(this, "You clicked settings", Toast.LENGTH_SHORT).show();
                        Intent help = new Intent(this, HelpActivity.class);
                        startActivity(help);
                        break;
    

    The Problem

    The keyword this refers to menu help item, not the activity. Since the first parameter of an Intent is packageContext, this will not work.

    The Solution

    Simply change this in your Intent to MainActivity.this to refer to the activity as the package context.

    Check out the docs for more info.