安卓APP常用界面切换RadioButton+fragment
来源:互联网 发布:反抄袭软件 编辑:程序博客网 时间:2024/05/18 01:14
时隔多日,上次CSDN把我的草稿吞了后,一直筹划自己的网站写blog,但是各种原因,最终搁浅。
今天带来的是,界面切换RadioButton+fragment,类似QQ、淘宝、微信之类的主页界面切换。而且考虑到各种原因,可能不会太深入的剖析。
首先,我们新建一个项目,会直接生成一个ACTIVITY+layout。这时候我们无需做出任何改变,先删除菜单功能。添加双击返回键退出程序,代码如下:
import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.KeyEvent;import android.view.Window;import android.widget.Toast;public class MainActivity extends FragmentActivity { private long exitTime = 0; //退出时间标记 public String HOMEFRAGEMENT = "homefragement"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initFragment(); } /** * 填充布局 */ private void initFragment() { //获取窗体碎片管理器 FragmentManager fm = getSupportFragmentManager(); //启动窗体碎片事务 FragmentTransaction transaction = fm.beginTransaction(); //设定Fragment窗体的交换,拿到Acitivity的Fragment布局的ID,后面跟上我们要添加的主页切换的布局,最后的时我们设定的标记 transaction.replace(R.id.activityMain, new HomeFragment(), HOMEFRAGEMENT); //提交事务 transaction.commit(); } /** * 双击返回键退出程序 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次返回键退出程序!!!", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else {// 此处加入退出程序代码 finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event); }}
上面代码中,值得一提的时,我们在Activity中,设定的布局一定要是FragmentLayout,而且我们的Activity一定要继承FramentActivity。布局代码如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activityMain" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"></FrameLayout>
既然我们已经设定好主界面,并且可以看到在我的主界面中,已经添加好了布局填充的方法,这个时候我们只需要按部就班的,设定便可以了!
思路:设定baseFragment→设定主页FragmentActivity(添加ViewPager(设定baseViewPager→设定每个切换页(继承自baseViewPager)))
baseFragment如下:
import android.support.v4.app.Fragment;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * baseFragment 所有Activity的基类,子类通过使用initViews方法来加载布局 * Created by Acheng on 15/9/15. */public abstract class BaseFragment extends Fragment { protected FragmentActivity mActivity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = getActivity(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return initViews(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } @Override public void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); } @Override public void onDestroy() { super.onDestroy(); } /** * 抽象方法,子类必须实现的创建View对象 * @return */ public abstract View initViews(); /** * 初始化数据,子类可不必实现 */ public void initData(){}}
按照思路,现在我们应当设定FragmentActivity:
import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.widget.RadioGroup;import com.acheng.activityfragment.base.BaseFragment;import com.acheng.activityfragment.base.BasePager;import com.acheng.activityfragment.concretelypager.ActivityPager;import com.acheng.activityfragment.concretelypager.MainCityPager;import com.acheng.activityfragment.concretelypager.ManorsPager;import com.acheng.activityfragment.concretelypager.SetsPager;import com.acheng.activityfragment.concretelypager.ShowsPager;import com.acheng.activityfragment.concretelypager.StoryPager;import java.util.ArrayList;/** * Created by pang-pc on 15/9/15. */public class HomeFragment extends BaseFragment { private RadioGroup radioGroup; private android.support.v4.view.ViewPager mViewPager; private ArrayList<BasePager> mViewPagerArrayList; private M_ViewPager_Adapter mViewPagerAdapter; @Override public View initViews() { View view = View.inflate(mActivity, R.layout.activity_home, null); radioGroup = (RadioGroup) view.findViewById(R.id.radioGroup); mViewPager = (ViewPager) view.findViewById(R.id.mViewPager); return view; } @Override public void initData() { mViewPagerArrayList = new ArrayList<BasePager>(); //添加主界面Fragment进入布局文件中 { mViewPagerArrayList.add(new MainCityPager(mActivity)); mViewPagerArrayList.add(new ActivityPager(mActivity)); mViewPagerArrayList.add(new ShowsPager(mActivity)); mViewPagerArrayList.add(new ManorsPager(mActivity)); mViewPagerArrayList.add(new StoryPager(mActivity)); mViewPagerArrayList.add(new SetsPager(mActivity)); } //设定主页面布局 mViewPagerAdapter = new M_ViewPager_Adapter(); mViewPager.setAdapter(mViewPagerAdapter); radioGroup.check(R.id.maincity); //设定进入界面标记的底部按钮 mViewPagerArrayList.get(0).initData(); //根据被选择的页面加载对应的数据,降低数据消耗 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.maincity: mViewPager.setCurrentItem(0, false); //根据点击主页面线面导航栏按钮设定页面跳转 mViewPagerArrayList.get(0).initData(); //根据被选择的页面加载对应的数据,降低数据消耗 break; case R.id.activities: mViewPager.setCurrentItem(1, false); mViewPagerArrayList.get(1).initData(); break; case R.id.shows: mViewPager.setCurrentItem(2, false); mViewPagerArrayList.get(2).initData(); break; case R.id.manors: mViewPager.setCurrentItem(3, false); mViewPagerArrayList.get(3).initData(); break; case R.id.stroy: mViewPager.setCurrentItem(4, false); mViewPagerArrayList.get(4).initData(); break; case R.id.sets: mViewPager.setCurrentItem(5, false); mViewPagerArrayList.get(5).initData(); break; default: break; } } }); }<span style="white-space:pre"></span>//ViewPager的适配器 class M_ViewPager_Adapter extends PagerAdapter { /** * Return the number of views available. */ @Override public int getCount() { return mViewPagerArrayList.size(); } /** * 决定一个viewpage是不是一个从ViewGroup返回的关联的view * * @param view * @param object * @return */ @Override public boolean isViewFromObject(View view, Object object) { return view == object; } /** * 初始化viewpager,get the view from ViewGroup who has some views. * * @param container * @param position * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mViewPagerArrayList.get(position).mRootView); //根据我们的basepager获取设定好的布局 return mViewPagerArrayList.get(position).mRootView; } /** * 销毁Viewpager,根据切换后的界面来销毁 * * @param container * @param position * @param object */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }}
我们一步一步按照思路进行,设定好Fragment后,我们需要的是有自己的Viewpager并把它们添加到Fragment中,这时候,我们的BaseViewPager出现了:
import android.app.Activity;import android.view.View;import android.widget.FrameLayout;import android.widget.TextView;import com.acheng.activityfragment.R;public class BasePager { protected final Activity mActivity; public View mRootView; public FrameLayout baseFramlayout; public TextView top_bar_title; public BasePager(Activity activity) { mActivity = activity;<span style="white-space:pre"></span>//这个时候,其实我们的基础布局已经加载好了,只需要把我们复杂的布局添加进来即可,故此处有activity对象 initViews(); } /** * 布局设定,子类可覆盖修改界面布局,子类覆盖时,请删除(super.initViews();) * @note 注意界面布局文件加载 */ public void initViews() { mRootView = View.inflate(mActivity, R.layout.base_pager, null); baseFramlayout = (FrameLayout) mRootView.findViewById(R.id.baseFramlayout); top_bar_title = (TextView) mRootView.findViewById(R.id.top_bar_title); } /** * 界面数据加载。子类可修改,可不修改 */ public void initData(){}}
既然,我们这里要加载我们的布局,那么这时候布局文件也是必不可少的:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FEA40A"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:padding="5dp" android:textSize="18sp" android:textColor="#DBDBDB" android:text="退出"/> <TextView android:id="@+id/top_bar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:textSize="18sp" android:textColor="#DBDBDB" android:layout_alignParentTop="true" android:text="标题" android:layout_centerHorizontal="true" /> </RelativeLayout> <FrameLayout android:id="@+id/baseFramlayout" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#474747"> </FrameLayout></LinearLayout>
现在,我们的baseViewPager已经设定好,这时候,我们只需把我们的详细的ViewPager添加进去,即可:
import android.app.Activity;import android.util.Log;import android.view.View;import android.widget.TextView;import com.acheng.activityfragment.R;import com.acheng.activityfragment.base.BasePager;/** * Created by pang-pc on 15/9/16. */public class MainCityPager extends BasePager { private TextView top_bar_title; public MainCityPager(Activity activity) { super(activity); } @Override public void initViews() { mRootView = View.inflate(mActivity, R.layout.mancitylayout,null); top_bar_title = (TextView) mRootView.findViewById(R.id.top_bar_title); } @Override public void initData() { Log.i("检查程序什么时候创建fragment", "这个时候创建了,但是创建几次呢?"); top_bar_title.setText("主城"); }}
布局文件如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/main_city_layout"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FEA40A"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:padding="5dp" android:textSize="18sp" android:textColor="#DBDBDB" android:text="退出"/> <TextView android:id="@+id/top_bar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:textSize="18sp" android:textColor="#DBDBDB" android:layout_alignParentTop="true" android:text="标题" android:layout_centerHorizontal="true" /> </RelativeLayout> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New RadioButton" android:id="@+id/radioButton" /> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/button" /> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New RadioButton" android:id="@+id/radioButton2" android:layout_gravity="center_vertical" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/button2" android:layout_gravity="center_horizontal" /> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Switch" android:id="@+id/switch1" android:layout_gravity="center_horizontal" /> <RatingBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ratingBar" android:layout_gravity="center_horizontal" /></LinearLayout>
剩下的几个ViewPager,也是类似的,只需要我们重写initViews方法即可,这里不再叙述。
由于时间匆忙来不及说明,粗浅之处,望大家海涵,如有需要,请大家下载我上传的文件,在其中可以看到,由于csdn资源审核问题,这里来不及贴出连接。
(从今天起,我上传的安卓项目都是使用Android Studio,不便之处,大家自己修改)
完成效果如图:文章排版很乱,望大家理解。
0 1
- 安卓APP常用界面切换RadioButton+fragment
- 安卓常见布局:RadioButton配合Fragment实现底部菜单栏切换
- fragment中添加ViewPager实现界面切换,动态添加radiobutton
- Android 安卓 fragment+viewpager 仿qq界面 实现点击菜单切换界面+滑动切换viewpager切换界面
- RadioButton实现Fragment切换
- RadioGroup+RadioButton切换Fragment
- 底部RadioButton实现Fragment切换
- Fragment+RadioButton点击切换页面
- BottomTabBar替换RadioButton切换Fragment
- 安卓学习笔记---fragment不断切换app崩溃的解决办法
- 安卓app页面跟随手指滑动而切换 ViewPager的使用 ViewPager+Fragment
- 无界面安卓app
- 安卓开发之多Fragment切换优化
- 常用RadioGroup+Fragment点击切换,RadioButton图标设置自己想要的位置及大小
- Fragment切换。radiobutton加fragment切换(附件源码下载)
- fragment+Radiobutton实现顶部导航切换
- android的RadioButton切换不同的fragment
- 动态添加RadioButton并切换Fragment
- 下一个排列
- Opencv固定阀值操作-Threshold函数
- mysql 远程连接不上,由于bind-address引起10061错误的情况
- 配置vim
- Servlet3两个特性演示
- 安卓APP常用界面切换RadioButton+fragment
- 紫书 习题 9-8 uva 10163
- android 自定义圆形头像组件
- 杭电acm--2041
- Some insight into the read cache of ZFS - or: The ARC
- Codeforces Round #313(div.2) E. Gerald and Giant Chess
- springmvc之rest风格的增删改查
- Android源码解析--Material Design之水波纹点击效果RippleEffect使用
- BOMB开发文档