How to change activity on bottom navigation button click?

雨燕双飞 提交于 2019-11-30 00:23:07

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;

@Override
protected 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 layouts For 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!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!