安卓底部导航栏+监听事件

好久之前就像写一个底部导航栏,但是找了很多都只是有页面,所以造成的困扰就是不知道底部导航栏对应控件的监听事件怎么写,真的花费了很多的时间和精力,直到今天,看了尚硅谷的视频,才发现就那么几句简单的代码,当时是又好气又好笑,写这篇文章 的目的,就是为了帮助到跟我一样,刻苦学习但是被困扰的人,致敬自己,也致敬你们:每一个自律且不想被生活打倒的人!
首先是布局页面main_activity:`

  <FrameLayout
        android:id="@+id/fl_main"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>

    <RadioGroup
        android:id="@+id/rg_main"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <RadioButton
            android:id="@+id/chat"
            android:text="消息"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:button="@null"
            android:background="@drawable/main_button_bg_seleor"
            android:layout_weight="1"
            android:textColor="@drawable/text_color"
            />
        <RadioButton
            android:id="@+id/contact"
            android:text="记事"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:button="@null"
            android:background="@drawable/main_button_bg_seleor"
            android:layout_weight="1"
            android:textColor="@drawable/text_color"            />
        <RadioButton
            android:id="@+id/setting"
            android:text="我的"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:button="@null"
            android:background="@drawable/main_button_bg_seleor"
            android:layout_weight="1"
            android:textColor="@drawable/text_color"            />
    </RadioGroup>

顺便贴一下两个xml文件main_button_bg_seleor:

 <item
        android:drawable="@color/teal_200"
        android:state_checked="false">
    </item>
    <item
        android:drawable="@color/purple_200"
        android:state_checked="true">
    </item>

然后是text color:

<item
    android:color="@color/white"
    android:state_checked="true">
</item>
    <item
        android:color="@color/black"
        android:state_checked="false">
    </item>

然后在布局页面引用就行了。
MainActivity的代码:


```java
public class MainActivity extends FragmentActivity {
    private RadioGroup rg_main;
    private ChatFragment chatFragment;
    private ContactFragment contactFragment;
    private SettingFragment settingFragment;

    private Button a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initListenter();
    }

    private void initListenter() {
        rg_main.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                Fragment fragment=null;
                switch (checkedId){
                    case R.id.chat:
                        fragment=chatFragment;
                        break;
                    case R.id.contact:
                        fragment=contactFragment;
                        break;
                    case R.id.setting:
                        fragment=settingFragment;
                        break;
                }
                switchFragment (fragment);
            }

            private void switchFragment(Fragment fragment) {
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction().replace(R.id. fl_main,fragment).commit();
            }
        });
        rg_main.check(R.id.chat);
    }

    private void initData() {
        chatFragment  = new ChatFragment();
        contactFragment  = new ContactFragment();
        settingFragment  = new SettingFragment();

    }

    private void initView() {
        rg_main=findViewById(R.id.rg_main);
    }
}
然后新建一个Fragment,以及布局:
首先是布局页面:

 <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    <TextView
        android:id="@+id/a"
        android:text="shezhi"
        android:textSize="30sp"
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </ScrollView>
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="tuichu"
        android:textSize="20sp"
        android:layout_gravity="center"/>
很简单,然后就是我一直想知道的:

public class SettingFragment extends Fragment {
    private Button btn;
    private TextView a;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.setting_fragment, null);
        initVive(view);
        return view;    }

    private void initVive(View view) {
        btn=view.findViewById(R.id.btn);
        a=view.findViewById(R.id.a);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initData();
    }

    private void initData() {
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getActivity(),"skcso",Toast.LENGTH_LONG).show();
                    }
                });
                a.setText("icshlsoic");
            }
        });
    }
}

然后到这里,就能运行了,还有两个Fragment以及页面,写法都一样;
最后代码以及视频教程均来自[哔哩哔哩尚硅谷](https://www.bilibili.com/video/BV1cW411V7yd?p=18&spm_id_from=pageDriver)
也许多年之后我也成为了程序员中的大佬,或者碌碌无为,又或者我从事跟程序员无关的工作,我都会很感谢现在努力的自己,天道酬勤!

											2021年3月21日
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值