专栏首页向治洪android的RadioGroup讲解

android的RadioGroup讲解

这个主要是如何替换fragment的demo。效果图如下(下面的tabhost和上面的bar不属于这次的内容,这个是我做的一个应用程序框架的一部分,有需要的或者想研究研究的可以私下联系),主要是讲解中间的内容怎么实现,即点击上面的RadioGroup,下面的内容一起改变(改变的是XML中的布局,这样的话下面三个的布局完全可以自己定义)

1.首先在主界面的xml中添加一个RadioGroup,里面添加三个RadioButton即可

<RadioGroup 
 android:id="@+id/radioGroup1" 
 style="@style/layout_full" 
 android:layout_margin="5dp" 
 android:background="@drawable/rounded_edittext" 
 android:orientation="horizontal" 
 android:padding="5dp" > 
 
 <RadioButton 
 android:id="@+id/radio0" 
 style="@style/layout_horizontal" 
 android:layout_gravity="center_horizontal" 
 android:layout_weight="1" 
 android:checked="true" 
 android:text="均分" /> 
 
 <RadioButton 
 android:id="@+id/radio1" 
 style="@style/layout_horizontal" 
 android:layout_gravity="center_horizontal" 
 android:layout_weight="1" 
 android:text="个人" /> 
 
 <RadioButton 
 android:id="@+id/radio2" 
 style="@style/layout_horizontal" 
 android:layout_gravity="center" 
 android:layout_weight="1" 
 android:text="借贷" /> 
 </RadioGroup> 

其中

android:background="@drawable/rounded_edittext" 

这一句是给这个RadioGroup添加一个带圆角的边框 

rounded_edittext.xml的代码如下

<?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> 

放置在drawable文件夹下即可

2.下面的内容由三个xml定义好的布局来呈现,这三个xml的布局可以自己来写 ,我就很简单地建了三个,做例子用

speeddial_fragment_pay1.xml

<?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的布局下增加:

<FrameLayout 
 android:id="@+id/fragment_container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" /> 

这样布局就完成了

4.由于Fragment的特性,我们要新建三个自己的Fragment,都继承自Fragment 

SpeeddialFragmentOne.java

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 ,改变的仅仅是

return inflater.inflate(R.layout.speeddial_fragment_pay1, container, false);  

5.在主Activity中调用:

MainActivity.java

/** 
 * 主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就不提供下载了,毕竟不是很难,所有的东西都交代了,自己敲一遍收获总是比打开别人的代码来研究要好的多。

例子中有什么错误的地方欢迎指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 仿网易新闻页面效果

    不扯闲话了,直接进入正题吧 frame_content.xml <?xml version="1.0" encoding="utf-8"?> <FrameLa...

    xiangzhihong
  • 仿今日头条顶部导航效果

     之前发现很多人在群里面、论坛上求网易新闻客户端的源码,之后我就去下了个网易新闻客户端和今日头条新闻客户端,发现他们的大体是一样的,于是在最近的空闲时间,便去琢...

    xiangzhihong
  • RecyclerView 实现gallery画廊效果

    1、RecyclerView的基本用法 首先主Activity的布局文件: <RelativeLayout xmlns:android="http://sc...

    xiangzhihong
  • [android] 电话拨号器

    陶士涵
  • 安卓开发_九宫格布局

    听着music睡
  • 进度条ProgressBar

    拖动滑块改变图片透明度 1.布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/...

    欢醉
  • [android] 开启新的activity获取他的返回值

    应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面

    陶士涵
  • 15.Android-实现TCP客户端,支持读写

    在上章14.Android-使用sendMessage线程之间通信我们学习了如何在线程之间发送数据.

    张诺谦
  • A020-列表容器之ListView

    前面介绍了Android UI中的五大布局容器,本节课介绍实际项目当中经常会用到的组件-ListView,它也是一个布局容器,它的每一项就是我们的列表项,每一个...

    用户1130025
  • Android开发之漫漫长途 番外篇——自定义View的各种姿势1

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

    mafeibiao

扫码关注云+社区

领取腾讯云代金券