Reputation: 5100
I'm building a base activity for navigation and want something flexible so the Activity dictates to the Base Activity which layout to inflate.
I have the following
public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private int mLayoutRes;
protected void setLayout(int layoutRes) {
mLayoutRes = layoutRes;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mLayoutRes);
// Layout implements toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null){
setSupportActionBar(toolbar);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
// The layout implements the nav
if (drawer != null){
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
}
// Other Nav code ommitted as its too verbose
}
Then the Layout is passed from the activity as folows
public class Home extends BaseActivity {
private final String TAG = "Home";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.setLayout(R.layout.activity_home);
super.onCreate(savedInstanceState);
// Other Activity code
}
}
Is there a better way to achieve this? Maybe setting a base layout with a content frame and inflating into that?
Any suggestions would be appreciated.
Upvotes: 9
Views: 16046
Reputation: 7532
You can follow BaseActivity from Google IO application. Just override setContentView
and you dont need setLayout
Here is my BaseActivity
package com.vtcmobile.kqviet.activity;
public class BaseActivity extends AppCompatActivity {
private Toolbar toolbar;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;
private NavigationView navigationView;
protected Context mContext;
public NavigationView getNavigationView() {
return navigationView;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = BaseActivity.this;
}
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
initToolbar();
}
private void initToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
private void setUpNav() {
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(BaseActivity.this, drawerLayout, R.string.app_name, R.string.app_name);
drawerLayout.setDrawerListener(drawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
navigationView = (NavigationView) findViewById(R.id.navigation);
// Setting Navigation View Item Selected Listener to handle the item
// click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Checking if the item is in checked state or not, if not make
// it in checked state
if (menuItem.isChecked())
menuItem.setChecked(false);
else
menuItem.setChecked(true);
// Closing drawer on item click
drawerLayout.closeDrawers();
// Check to see which item was being clicked and perform
// appropriate action
Intent intent;
switch (menuItem.getItemId()) {
case R.id.xxxx:
return true;
}
return false;
}
});
// Setting the actionbarToggle to drawer layout
// calling sync state is necessay or else your hamburger icon wont show
// up
drawerToggle.syncState();
}
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
setUpNav();
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item))
return true;
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Upvotes: 10
Reputation: 3108
Here is my example of implementing to BaseActivity, I found I did it differently and it worked for me.
My Base Activity
public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
//swap this to a switch statement
if (id == R.id.nav_newgame) {
// Start new game
Log.e("Base","new Game");
} else if (id == R.id.nav_players) {
} else if (id == R.id.nav_history) {
} else if (id == R.id.nav_tools) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_about) {
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
Any activity sharing the same Navigation Drawer
public class MainActivity extends BaseActivity
{
NavigationView navigationView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
Allowing one dynamic Nav Drawer in your base activity saving you the trouble of writing code over and over. Additionally you can override the Base Activity's Nav Drawer and make different results for different situations.
Upvotes: 1
Reputation: 4041
I make some changes in BaseActivity class using inflating layout of baseactivity and reuse, you can use following class for extend only into any one of your activity class.
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;
public class BaseActivity extends AppCompatActivity {
public Toolbar toolbar;
public DrawerLayout drawerLayout;
public ActionBarDrawerToggle drawerToggle;
public NavigationView navigationView;
public Context mContext;
public NavigationView getNavigationView() {
return navigationView;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = BaseActivity.this;
setContentView(R.layout.base_activity);
}
@Override
public void setContentView(int layoutResID) {
DrawerLayout fullView = (DrawerLayout)getLayoutInflater().inflate(R.layout.base_activity, null);
FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content);
getLayoutInflater().inflate(layoutResID, activityContainer, true);
super.setContentView(fullView);
initToolbar();
}
private void initToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
private void setUpNav() {
drawerLayout = (DrawerLayout) findViewById(R.id.activity_container);
drawerToggle = new ActionBarDrawerToggle(BaseActivity.this, drawerLayout, R.string.app_name, R.string.app_name);
drawerLayout.setDrawerListener(drawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
navigationView = (NavigationView) findViewById(R.id.navigation);
// Setting Navigation View Item Selected Listener to handle the item
// click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Checking if the item is in checked state or not, if not make
// it in checked state
if (menuItem.isChecked())
menuItem.setChecked(false);
else
menuItem.setChecked(true);
// Closing drawer on item click
drawerLayout.closeDrawers();
// Check to see which item was being clicked and perform
// appropriate action
Intent intent;
switch (menuItem.getItemId()) {
case R.id.xxxx:
return true;
}
return false;
}
});
// Setting the actionbarToggle to drawer layout
// calling sync state is necessay or else your hamburger icon wont show
// up
drawerToggle.syncState();
}
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
setUpNav();
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item))
return true;
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
This is my base_activity.xml,
<android.support.v4.widget.DrawerLayout
android:id="@+id/activity_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
/>
<FrameLayout
android:id="@+id/activity_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
/>
</android.support.v4.widget.DrawerLayout>
Upvotes: 10
Reputation: 153
Common Navigation DraweFor All Activity
## BaseActivity.java ##
public class BaseActivity extends FragmentActivity
{
final String[] navDrawMenuItems = {"My Project" , "My Project1", "MyProject2", "MyProject3" ,"MyProject4","MyProject5","MyProject6"};
final int[] navDrawMenuIcons = {R.drawable.vendor,
R.drawable.vendor,
R.drawable.vendor,
R.drawable.vendor,
R.drawable.log_icon,
R.drawable.vendor,
};
public RelativeLayout mRelativeLayout;
public FrameLayout actContent;
public ListView navList;
LinearLayout drawer_List;
TextView text_emp_name;
public MenuDrawerAdapter menuDrawerAdapter;
public ArrayList<Vendor_Wrapper> menuDrawerList = new ArrayList<>();
public DrawerArrowDrawable drawerArrowDrawable;
public ImageView drawer_indicator;
public DrawerLayout drawer_layout;
public float offset;
public boolean flipped;
SharedPreferences _SP;
SharedPreferences.Editor _EDITOR;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
for (int i = 0; i < navDrawMenuItems.length; i++)
{
menuDrawerList.add(new Vendor_Wrapper(""+i,navDrawMenuItems[i], navDrawMenuIcons[0]));
}
}
@Override
public void setContentView(int layoutResID)
{
mRelativeLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.activity_base, null);
actContent = (FrameLayout) mRelativeLayout.findViewById(R.id.main);
// set the drawer dialog_view as main content view of Activity.
setContentView(mRelativeLayout);
// add dialog_view of BaseActivities inside framelayout.i.e. frame_container
getLayoutInflater().inflate(layoutResID, actContent, true);
drawer_layout = (DrawerLayout) findViewById(R.id.drawer_layout);
// =========================================
final Resources resources = getResources();
drawerArrowDrawable = new DrawerArrowDrawable(resources);
drawer_indicator = (ImageView) findViewById(R.id.drawer_indicator);
drawerArrowDrawable.setStrokeColor(resources.getColor(android.R.color.white));
drawer_indicator.setImageDrawable(drawerArrowDrawable);
// =========================================
text_emp_name=(TextView)findViewById(R.id.text_emp_name) ;
_SP = getSharedPreferences(Constants.pref_name, MODE_PRIVATE);
text_emp_name.setText(_SP.getString("empName",""));
drawer_List=(LinearLayout)findViewById(R.id.drawer_List);
navList = (ListView) findViewById(R.id.drawer_List1);
menuDrawerAdapter = new MenuDrawerAdapter(BaseActivity.this, menuDrawerList);
navList.setAdapter(menuDrawerAdapter);
navList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Intent intent;
// Toast.makeText(getApplicationContext(),"position "+position,30).show();
Log.i(Constants.TAG,"drawer_position: "+position);
switch (position)
{
case 0:
intent = new Intent(BaseActivity.this, List_of_projects.class);
startActivityForResult(intent,Constants.EXIT);
//
break;
case 1:
intent = new Intent(BaseActivity.this, List_of_projects.class);
startActivityForResult(intent,Constants.EXIT);
// drawer_indicator.performClick();
break;
case 2:
intent = new Intent(BaseActivity.this, List_of_projects.class);
startActivityForResult(intent,Constants.EXIT);
// drawer_indicator.performClick();
break;
case 3:
intent = new Intent(BaseActivity.this, List_of_projects.class);
startActivityForResult(intent,Constants.EXIT);
// drawer_indicator.performClick();
break;
case 4:
intent = new Intent(BaseActivity.this, List_of_projects.class);
intent.putExtra("Type","Complaints");
startActivityForResult(intent,Constants.EXIT);
// drawer_indicator.performClick();
break;
case 5:
intent = new Intent(BaseActivity.this, List_of_projects.class);
intent.putExtra("Type","Suggestions");
startActivityForResult(intent,Constants.EXIT);
break;
case 6:
intent = new Intent(BaseActivity.this, List_of_projects.class);
startActivityForResult(intent,Constants.EXIT);
break;
case 7:
System.out.println("Logout clickedddddd ");
SharedPreferences.Editor editor = getSharedPreferences("my_pref", MODE_PRIVATE).edit();
editor.clear();
editor.commit();
setResult(Constants.EXIT);
finish();
break;
default:
break;
}
}
});
initViewsandSharedPreferencesandSQLiteAdapter();
clickToViews();
}
public void setMenuDrawer(ArrayList<Vendor_Wrapper> menuDrawerList, String email)
{
navList = (ListView) findViewById(R.id.drawer_List1);
menuDrawerAdapter = new MenuDrawerAdapter(BaseActivity.this, menuDrawerList);
navList.setAdapter(menuDrawerAdapter);
}
public void initViewsandSharedPreferencesandSQLiteAdapter()
{
_SP = getSharedPreferences(Constants.TAG, MODE_PRIVATE);
_EDITOR = _SP.edit();
drawer_indicator_LL = (LinearLayout) findViewById(R.id.drawer_indicator_LL);
}
/**
* Take care of popping the fragment back stack or finishing the activity
* as appropriate.
*/
@Override
public void onBackPressed()
{
super.onBackPressed();
if (drawer_layout.isDrawerVisible(Gravity.RIGHT))
{
drawer_layout.closeDrawer(drawer_List);
}
else
{
finish();
}
}
public void clickToViews()
{
drawer_layout.setDrawerListener(new DrawerLayout.SimpleDrawerListener()
{
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
offset = slideOffset;
// Sometimes slideOffset ends up so close to but not quite 1 or 0.
if (slideOffset >= .995)
{
flipped = true;
drawerArrowDrawable.setFlip(flipped);
} else if (slideOffset <= .005)
{
flipped = false;
drawerArrowDrawable.setFlip(flipped);
}
drawerArrowDrawable.setParameter(offset);
}
});
drawer_indicator.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (drawer_layout.isDrawerVisible(Gravity.RIGHT))
{
drawer_layout.closeDrawer(drawer_List);
}
else
{
drawer_layout.openDrawer(drawer_List);
}
}
});
drawer_indicator_LL.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer_layout.isDrawerVisible(Gravity.RIGHT)) {
drawer_layout.closeDrawer(drawer_List);
} else {
drawer_layout.openDrawer(drawer_List);
}
}
});
}
public void NavigationPerformClick()
{
drawer_indicator.performClick();
}
private class MenuDrawerAdapter extends BaseAdapter
{
ArrayList<Vendor_Wrapper> menuDrawerList;
Context context;
public MenuDrawerAdapter(Context context, ArrayList<Vendor_Wrapper> menuDrawerList)
{
super();
this.context = context;
this.menuDrawerList = menuDrawerList;
}
@Override
public int getCount()
{
return menuDrawerList.size();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater layoutInflater = LayoutInflater.from(BaseActivity.this);
ViewHolder viewHolder;
if (convertView == null)
{
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.row_menu_drawer, null);
viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);
viewHolder.imgIcon = (ImageView) convertView.findViewById(R.id.img_icon);
viewHolder.main_RL = (RelativeLayout)convertView.findViewById(R.id.main_RL);
viewHolder.imgIcon.setVisibility(View.GONE);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
}
Vendor_Wrapper menuDrawerModel = menuDrawerList.get(position);
//## Setup Data below
String Name = menuDrawerModel.getName();
String id = menuDrawerModel.getId();
viewHolder.tvTitle.setText(menuDrawerModel.getName());
// viewHolder.main_RL.setOnClickListener(new ClickToView(BaseActivity.this,position,id,Name));
viewHolder.imgIcon.setImageResource(menuDrawerModel.getDrawable_icon());
return convertView;
}
public class ViewHolder
{
TextView tvTitle;
ImageView imgIcon;
RelativeLayout main_RL;
}
}
protected class MenuDrawerModel
{
private String title;
private int icon;
public String Icon_url;
public MenuDrawerModel(String title, int icon, String icon_url) {
this.title = title;
this.icon = icon;
Icon_url = icon_url;
}
public MenuDrawerModel(String title, int icon)
{
super();
this.title = title;
this.icon = icon;
}
public MenuDrawerModel() {
super();
}
public String getTitle() {
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon)
{
this.icon = icon;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("Logout onActivityResult "+resultCode);
if(resultCode==Constants.EXIT)
{
setResult(Constants.EXIT);
finish();
}
}
}
## MainActivity.java ##
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
## activity_base.xml ##
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/header_view"
layout="@layout/layout_header_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/header_view">
</FrameLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/drawer_List"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout_marginTop="50dp"
android:background="@color/white"
android:choiceMode="singleChoice"
android:orientation="vertical"
android:weightSum="10">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:background="@drawable/bagroundg"
android:orientation="vertical"
android:visibility="gone"
android:weightSum="5">
</LinearLayout>
<ListView
android:id="@+id/drawer_List1"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/white"
android:choiceMode="singleChoice" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
## activity_main.xml ##
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello World!"
android:textSize="30dp" />
</LinearLayout>
</RelativeLayout>
public class Vendor_Wrapper
{
private String id;
public Vendor_Wrapper(String id, String name, int drawable_icon)
{
this.id = id;
Name = name;
this.drawable_icon = drawable_icon;
}
private String Name;
private String contact_no;
private String Email_id;
private String Address;
private String img;
private String PAY_MODE;
private String min;
private String max;
private String imgs;
private int drawable_icon;
public int getDrawable_icon() {
return drawable_icon;
}
public void setDrawable_icon(int drawable_icon) {
this.drawable_icon = drawable_icon;
}
public String getEmail_id() {
return Email_id;
}
public void setEmail_id(String email_id) {
Email_id = email_id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getContact_no() {
return contact_no;
}
public void setContact_no(String contact_no) {
this.contact_no = contact_no;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getPAY_MODE() {
return PAY_MODE;
}
public void setPAY_MODE(String PAY_MODE) {
this.PAY_MODE = PAY_MODE;
}
public String getMin() {
return min;
}
public void setMin(String min) {
this.min = min;
}
public String getMax() {
return max;
}
public void setMax(String max) {
this.max = max;
}
public String getImgs() {
return imgs;
}
public void setImgs(String imgs) {
this.imgs = imgs;
}
public Vendor_Wrapper(String id, String name, String contact_no, String email_id, String address, String img, String PAY_MODE, String min, String max, String imgs) {
this.id = id;
Name = name;
this.contact_no = contact_no;
Email_id = email_id;
Address = address;
this.img = img;
this.PAY_MODE = PAY_MODE;
this.min = min;
this.max = max;
this.imgs = imgs;
}
}
Upvotes: 1
Reputation: 24114
You can refer to my following code, pay attention to addContentView
in my base activity (here I name it NavigationDrawerActivity
)
Base activity:
public class NavigationDrawerActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_drawer);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);
mDrawerLayout.setDrawerListener(toggle);
toggle.syncState();
}
/**
* called in extending activities instead of setContentView...
*
* @param layoutId The content Layout Id of extending activities
*/
public void addContentView(int layoutId) {
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView = inflater.inflate(layoutId, null, false);
mDrawerLayout.addView(contentView, 0);
}
}
Then in other activities, for example, MainActivity:
public class MainActivity extends NavigationDrawerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.addContentView(R.layout.activity_main);
}
}
Hope this helps!
Upvotes: 7
Reputation: 157457
you could either override setContentView
in your BaseActivity
and initialised everything after the super call or move all the DrawerLayout
related stuff to a protected
method and call it from each children of BaseActivity
, after you call setContentView
. I think the first should be straightforward an, from what you posted, you can avoid to override onCreate in the BaseActivity
Upvotes: 2