简体   繁体   中英

How to show menu and title on all activities?

I have created three activities explore/deals and packages. I have created my menu using drawer layout. I would like to saw my menu icon on each activity screen. I have created a base activity for menu items and extends that to all activities. I'm attaching my homeactivity code, base activity code and explore activity code below

enter image description here

在此处输入图片说明 Here is explore activity code

package com.example.windows81.travelspoc;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class ExploreActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_explore);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    //getMenuInflater().inflate(R.menu.menu_second, menu);  <- remove this
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}
}

Here is my homeactivity code

package com.example.windows81.travelspoc;

import android.content.Context;
import android.content.Intent;
import android.support.design.widget.NavigationView;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.Timer;
import java.util.TimerTask;

public class HomeActivity extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener{


ViewPager viewPager;
LinearLayout sliderDotspanel;
NavigationView mNavigationView;
private int dotscount;
private ImageView[] dots;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mtoggle;

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

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    mtoggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, 
R.string.close);
    NavigationView mNavigationView = (NavigationView) 
findViewById(R.id.navigation);
    mNavigationView.setNavigationItemSelectedListener(this);

    mDrawerLayout.addDrawerListener(mtoggle);
    mtoggle.syncState();

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewPager);

    sliderDotspanel = (LinearLayout) findViewById(R.id.SliderDots);

    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this);
    viewPager.setAdapter(viewPagerAdapter);

    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new MyTimerTask(), 2000, 4000);

    dotscount = viewPagerAdapter.getCount();
    dots = new ImageView[dotscount];

    for (int i = 0; i < dotscount; i++){
        dots[i] = new ImageView(this);


dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),
R.drawable.incative_dot));

        LinearLayout.LayoutParams params = new 
LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
LinearLayout.LayoutParams.WRAP_CONTENT);

        params.setMargins(8, 0, 8,0);

        sliderDotspanel.addView(dots[i], params);
    }

dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), 
R.drawable.ic_active));
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int 
positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

            for (int i = 0; i < dotscount; i++){

dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), 
R.drawable.incative_dot));
            }



dots[position].setImageDrawable(ContextCompat.getDrawable
(getApplicationContext(), R.drawable.ic_active));

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(mtoggle.onOptionsItemSelected(item)){
        return true;
    }
    switch (item.getItemId()) {
        case R.id.explore:
            // do what you want here
            myMethod();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

public class MyTimerTask extends TimerTask{

    @Override
    public void run() {

        HomeActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                if (viewPager.getCurrentItem() == 0){
                    viewPager.setCurrentItem(1);
                }else if (viewPager.getCurrentItem() == 1){
                    viewPager.setCurrentItem(2);
                }else{
                    viewPager.setCurrentItem(0);
                }


            }
        });

    }
}

public void myMethod(){
    Intent intent = new Intent(this,ExploreActivity.class);
    startActivity(intent);
}
public void exploreActivity(View view){
    myMethod();
}

public void packagesActivity(View view){
    Intent intent = new Intent(this,PackagesActivity.class);
    startActivity(intent);
}

public void dealsActivity(View view){
    Intent intent = new Intent(this,DealsActivity.class);
    startActivity(intent);
}
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.explore) {
        myMethod();
    }
    return false;
}
}

Here is my Base activity code

package com.example.windows81.travelspoc;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;

/**
 * Created by Windows 8.1 on 11/15/2017.
 */

public class BaseActivity extends AppCompatActivity{
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.navigation_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.explore:
            myMethod();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

public void myMethod(){
    Intent intent = new Intent(this,ExploreActivity.class);
    startActivity(intent);
}
public void exploreActivity(View view){
    myMethod();
}

public void packagesActivity(View view){
    Intent intent = new Intent(this,PackagesActivity.class);
    startActivity(intent);
}

public void dealsActivity(View view){
    Intent intent = new Intent(this,DealsActivity.class);
    startActivity(intent);
}
}

If you have same menu through out all activities then i will advice you to create one

BaseActivity then extends it to AppcompatActivity

Make Activity1 -> extends BaseActivity

Magic comes here -> You don't have to use setContentView for all the time.

Make BaseActivity with One XML -> FrameLayout -> with Your

ToolBar & FrameLayout

Now in the Activity1 inflate your view in FrameLayout of BaseActivity

And follow the same system for all the activities.

I had the same situation -> I had to display sideMenu in every Activity so i ended up with this solution.

Create a base activity in which u write code for menu items then extend the base activity to all your inner activities.

For Title

Create a common title layout.

Then in your HomeActivity

abstract class HomeActivity extends Activity {
  protected TextView txtHeading;
  public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
  }


  protected void setHeading(int resId) {
     if(tv_title == null)
     txtHeading = findViewById(R.id.tv_title);
     if(tv_title != null)
       txtHeading.setText(resId);
  }
}

Then in other activities like activity_main.xml

MainActivity

class MainActivity extends BaseActivity {
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      setHeading(R.string.heading_main);
   }
}

same goes for other activities

For Same Menu Option

public class HomeActivity extends Activity {

    // other overidden methods

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item:
                // do what you want here
                return true;
            default:
               return super.onOptionsItemSelected(item);
        }
    }
}

Then in child activity

  public class ChildActivity extends BaseActivity { 


    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    //getMenuInflater().inflate(R.menu.menu_second, menu);  <- remove this
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM