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