android的RadioGroup讲解详解手机开发
这个主要是如何替换fragment的demo。效果图如下(下面的tabhost和上面的bar不属于这次的内容,这个是我做的一个应用程序框架的一部分,有需要的或者想研究研究的可以私下联系),主要是讲解中间的内容怎么实现,即点击上面的RadioGroup,下面的内容一起改变(改变的是XML中的布局,这样的话下面三个的布局完全可以自己定义)
1.首先在主界面的xml中添加一个RadioGroup,里面添加三个RadioButton即可
这一句是给这个RadioGroup添加一个带圆角的边框
rounded_edittext.xml的代码如下
[html]
view plain
copy
? ?xml version= 1.0 encoding= utf-8 ? shape xmlns:android= http://schemas.android.com/apk/res/android android:shape= rectangle solid android:color= #ffffff / corners android:radius= 7dip / stroke android:width= 2px android:color= #000000 / /shape
2.下面的内容由三个xml定义好的布局来呈现,这三个xml的布局可以自己来写 ,我就很简单地建了三个,做例子用
speeddial_fragment_pay1.xml
[html]
view plain
copy
? ?xml version= 1.0 encoding= utf-8 ? RelativeLayout xmlns:android= http://schemas.android.com/apk/res/android android:layout_width= fill_parent android:layout_height= fill_parent android:layout_margin= 5dp android:background= @drawable/rounded_edittext android:orientation= vertical Button android:id= @+id/Button04 android:layout_width= wrap_content android:layout_height= wrap_content android:layout_centerHorizontal= true android:layout_centerVertical= true android:text= Button / /RelativeLayout
3.(重要)在主布局文件中添加Fragment的载体,比如一个framlayout,负责承载fragment
在上面的RadioGroup的布局下增加:
这样布局就完成了
4.由于Fragment的特性,我们要新建三个自己的Fragment,都继承自Fragment
SpeeddialFragmentOne.java
[java]
view plain
copy
? package com.gracker.fragment; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.gracker.tabactivity.R; public class SpeeddialFragmentOne extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.speeddial_fragment_pay1, container, false); } }
这个Fragment非常简单,没有添加任何的逻辑,仅仅只是在onCreateView的要布局然后以View返回。Fragment有很多方法,可以根据自己的需要进行重载,这里就不多说了,自己到用的时候自然就知道了。
类似地,建立另外两个Fragment ,改变的仅仅是
[java]
view plain
copy
? /** * 主Activity * * @author Gracker Gao * @date 2012.8.15 */ package com.gracker.hostactivity; import android.app.Activity; import android.app.FragmentTransaction; import android.os.Bundle; import android.util.Log; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import com.gracker.fragment.SpeeddialFragmentOne; import com.gracker.fragment.SpeeddialFragmentThree; import com.gracker.fragment.SpeeddialFragmentTwo; import com.gracker.tabactivity.R; public class MainActivity extends Activity { private final String TAG = SpeedDialActivity ; private RadioGroup mRadioGroup; private SpeeddialFragmentTwo mSpeeddialFragmentTwo; private SpeeddialFragmentOne mSpeeddialFragmentOne; private SpeeddialFragmentThree mSpeeddialFragmentThree; private FragmentTransaction transaction; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.speeddial); init_date(); setupWidgets(); } private void init_date(){ transaction = getFragmentManager() .beginTransaction(); if (null == mSpeeddialFragmentOne) { mSpeeddialFragmentOne = new SpeeddialFragmentOne(); } transaction.add(R.id.fragment_container, mSpeeddialFragmentOne); // Commit the transaction transaction.commit(); } private void setupWidgets() { mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup1); mRadioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (checkedId) { case R.id.radio0: Log.v(TAG, setupWidgets():radio0 clicked ); if (null == mSpeeddialFragmentOne) { mSpeeddialFragmentOne = new SpeeddialFragmentOne(); } transaction = getFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment_container, mSpeeddialFragmentOne); // Commit the transaction transaction.commit(); break; case R.id.radio1: Log.v(TAG, setupWidgets():radio1 clicked ); if (null == mSpeeddialFragmentTwo) { mSpeeddialFragmentTwo = new SpeeddialFragmentTwo(); } transaction = getFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment_container, mSpeeddialFragmentTwo); // Commit the transaction transaction.commit(); break; case R.id.radio2: Log.v(TAG, setupWidgets():radio2 clicked ); if (null == mSpeeddialFragmentThree) { mSpeeddialFragmentThree = new SpeeddialFragmentThree(); } transaction = getFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment_container, mSpeeddialFragmentThree); // Commit the transaction transaction.commit(); break; default: break; } } }); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); // dataEncapsulation.closeDataBase_speedDial(); } }
init_data()函数中主要是初始化值,包括初始化用户第一个看到的Fragment
在RadioGroup的onCheckedChangeLinsteer中,切换Fragment。关于Fragment的一些操作,比如增加,删除,替换等等,可以参照这个帖子:http://www.eoeandroid.com/thread-71642-1-1.html 讲的很详细,我也不想重复。
这个Demo就不提供下载了,毕竟不是很难,所有的东西都交代了,自己敲一遍收获总是比打开别人的代码来研究要好的多。
例子中有什么错误的地方欢迎指正。
5649.html
app程序应用开发手机开发无线开发移动端开发相关文章
- android 安装p12证书,如何在Android中使用p12证书(客户端证书)
- android toast 自定义时间,Android 自定义 Toast 显示时间「建议收藏」
- Android Services Library_android freeware
- android 校验用户名密码手机邮箱身份证邮编等
- Android MVP详解手机开发
- 基于Android官方AsyncListUtil优化经典ListView分页加载机制(二)详解手机开发
- Android手机通话录音实现详解手机开发
- Android获取手机中外置内存卡、内置内存卡、手机内存路径详解手机开发
- [android] android项目架构详解手机开发
- [android] 手机卫士接收短信指令执行相应操作详解手机开发
- [android] 手机卫士欢迎细节和主界面详解手机开发
- [android] 自定义广播事件详解手机开发
- 关于Android的UI测试详解手机开发
- Android仿拼多多拼团堆叠头像详解手机开发
- android-async-http详解手机开发
- android进程 清理及activity栈管理详解手机开发
- Android滤镜效果实现及原理分析详解手机开发
- Android组件化框架项目详解手机开发
- 再谈Android动态链接库详解手机开发
- Android的三种主流资源尺寸详解手机开发
- android应用内跳转到微信详解手机开发
- android手机SD卡读写操作(以txt文本为例)实现步骤