How to change activity on bottom navigation button click?
I have solved this problem in following way:
1.Create one BaseActivity with bottom nav bar.
package com.example.apple.bottomnavbarwithactivity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.RadioButton; import android.widget.RadioGroup;public class BaseActivity extends AppCompatActivity {RadioGroup radioGroup1;RadioButton deals;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base); radioGroup1=(RadioGroup)findViewById(R.id.radioGroup1); deals = (RadioButton)findViewById(R.id.deals); radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Intent in; Log.i("matching", "matching inside1 bro" + checkedId); switch (checkedId) { case R.id.matching: Log.i("matching", "matching inside1 matching" + checkedId); in=new Intent(getBaseContext(),MatchingActivity.class); startActivity(in); overridePendingTransition(0, 0); break; case R.id.watchList: Log.i("matching", "matching inside1 watchlistAdapter" + checkedId); in = new Intent(getBaseContext(), WatchlistActivity.class); startActivity(in); overridePendingTransition(0, 0); break; case R.id.rates: Log.i("matching", "matching inside1 rate" + checkedId); in = new Intent(getBaseContext(),RatesActivity.class); startActivity(in); overridePendingTransition(0, 0); break; case R.id.listing: Log.i("matching", "matching inside1 listing" + checkedId); in = new Intent(getBaseContext(), ListingActivity.class); startActivity(in); overridePendingTransition(0, 0); break; case R.id.deals: Log.i("matching", "matching inside1 deals" + checkedId); in = new Intent(getBaseContext(), DealsActivity.class); startActivity(in); overridePendingTransition(0, 0); break; default: break; } } }); } }
BaseActivity layout named base_activity.xml
<LinearLayout android:layout_width="match_parent" android:layout_height="56dp" android:elevation="10dp" android:background="@color/white" android:id="@+id/bottonNavBar" android:paddingTop="5dp" android:orientation="horizontal" android:layout_alignParentBottom="true" android:foregroundGravity="bottom"> <RadioGroup android:id="@+id/radioGroup1" android:gravity="center" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="horizontal" android:baselineAligned="false"> <RadioButton android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" android:text="Matching" android:layout_weight="1" android:button="@null" android:padding="2dp" android:checked="false" android:textSize="12sp" android:drawableTop="@drawable/selector_matching" android:textColor="@drawable/selector_nav_text" android:id="@+id/matching"/> <RadioButton android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" android:button="@null" android:layout_weight="1" android:padding="2dp" android:checked="false" android:textSize="12sp" android:drawableTop="@drawable/selector_watchlist" android:textColor="@drawable/selector_nav_text" android:id="@+id/watchList" android:text="Watchlist"/> <RadioButton android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" android:id="@+id/rates" android:button="@null" android:paddingTop="5dp" android:paddingBottom="2dp" android:paddingLeft="2dp" android:paddingRight="2dp" android:layout_weight="1" android:checked="false" android:textSize="12sp" android:drawableTop="@drawable/selector_rates" android:textColor="@drawable/selector_nav_text" android:text="Rates"/> <RadioButton android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" android:button="@null" android:padding="2dp" android:checked="false" android:layout_weight="1" android:textSize="12sp" android:drawableTop="@drawable/selector_deals" android:textColor="@drawable/selector_nav_text" android:id="@+id/deals" android:text="Deals"/> <RadioButton android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" android:button="@null" android:padding="2dp" android:checked="false" android:layout_weight="1" android:textSize="12sp" android:drawableTop="@drawable/selector_listing" android:textColor="@drawable/selector_nav_text" android:id="@+id/listing" android:text="Listing"/> </RadioGroup> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/dynamicContent" android:orientation="vertical" android:layout_marginBottom="56dp" android:background="@color/white" android:layout_gravity="bottom"> </LinearLayout>
2.extend BaseActivity in all the activity that you want to open on bottom nav click and also need to inflate the activity layoutsFor example, I have created five sample activity.
i] MatchingActivity.
package com.example.apple.bottomnavbarwithactivity; import android.graphics.Color; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; //extends our custom BaseActivity public class MatchingActivity extends BaseActivity { LinearLayout dynamicContent,bottonNavBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_matching); //dynamically include the current activity layout into baseActivity layout.now all the view of baseactivity is accessible in current activity. dynamicContent = (LinearLayout) findViewById(R.id.dynamicContent); bottonNavBar= (LinearLayout) findViewById(R.id.bottonNavBar); View wizard = getLayoutInflater().inflate(R.layout.activity_matching, null); dynamicContent.addView(wizard); //get the reference of RadioGroup. RadioGroup rg=(RadioGroup)findViewById(R.id.radioGroup1); RadioButton rb=(RadioButton)findViewById(R.id.matching); // Change the corresponding icon and text color on nav button click. rb.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.ic_matching_clicked, 0,0); rb.setTextColor(Color.parseColor("#3F51B5")); } }
ii]WatchlistActivity
package com.example.apple.bottomnavbarwithactivity; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; public class WatchlistActivity extends AppCompatActivity { LinearLayout dynamicContent,bottonNavBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_watchlist1); dynamicContent = (LinearLayout) findViewById(R.id.dynamicContent); bottonNavBar= (LinearLayout) findViewById(R.id.bottonNavBar); View wizard = getLayoutInflater().inflate(R.layout.activity_watchlist1, null); dynamicContent.addView(wizard); RadioGroup rg=(RadioGroup)findViewById(R.id.radioGroup1); RadioButton rb=(RadioButton)findViewById(R.id.watchList); rb.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.favourite_heart_selected, 0,0); rb.setTextColor(Color.parseColor("#3F51B5")); } }
iii]RatesActivity
package com.example.apple.bottomnavbarwithactivity; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; public class RatesActivity extends BaseActivity { LinearLayout dynamicContent,bottonNavBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_rates); dynamicContent = (LinearLayout) findViewById(R.id.dynamicContent); bottonNavBar= (LinearLayout) findViewById(R.id.bottonNavBar); View wizard = getLayoutInflater().inflate(R.layout.activity_rates, null); dynamicContent.addView(wizard); RadioGroup rg=(RadioGroup)findViewById(R.id.radioGroup1); RadioButton rb=(RadioButton)findViewById(R.id.rates); rb.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.ic_rate_clicked, 0,0); rb.setTextColor(Color.parseColor("#3F51B5")); } }
iv] ListingActivity
package com.example.apple.bottomnavbarwithactivity; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; public class ListingActivity extends BaseActivity { LinearLayout dynamicContent,bottonNavBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_listing); dynamicContent = (LinearLayout) findViewById(R.id.dynamicContent); bottonNavBar= (LinearLayout) findViewById(R.id.bottonNavBar); View wizard = getLayoutInflater().inflate(R.layout.activity_listing, null); dynamicContent.addView(wizard); RadioGroup rg=(RadioGroup)findViewById(R.id.radioGroup1); RadioButton rb=(RadioButton)findViewById(R.id.listing); rb.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.ic_listing_clicked, 0,0); rb.setTextColor(Color.parseColor("#3F51B5")); } }
v] DealsActivity
package com.example.apple.bottomnavbarwithactivity; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; public class DealsActivity extends BaseActivity { LinearLayout dynamicContent,bottonNavBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_deals); dynamicContent = (LinearLayout) findViewById(R.id.dynamicContent); bottonNavBar= (LinearLayout) findViewById(R.id.bottonNavBar); View wizard = getLayoutInflater().inflate(R.layout.activity_deals, null); dynamicContent.addView(wizard); RadioGroup rg=(RadioGroup)findViewById(R.id.radioGroup1); RadioButton rb=(RadioButton)findViewById(R.id.deals); rb.setCompoundDrawablesWithIntrinsicBounds( 0,R.drawable.ic_deals_clicked, 0,0); rb.setTextColor(Color.parseColor("#3F51B5")); } }
Note: make sure that you handle back press properly.I have not written any code for back press.
With Activity
, you have to declare and init that BottomBar
each time you load that activity
.
With your problem, my answer is NO.
Btw, you can use Fragment which helps you solve this pretty good.
Time to learn something new, bro.
EDIT
You bring Fragment
inside only 1 Activity. And let BottomBar
inside Activity
while all others view and data set inside Fragment
.
Just try it!