android的RadioGroup讲解

时间:2022-11-29 09:57:16


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

android的RadioGroup讲解

android的RadioGroup讲解


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


[html] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. <RadioGroup
  2. android:id="@+id/radioGroup1"
  3. style="@style/layout_full"
  4. android:layout_margin="5dp"
  5. android:background="@drawable/rounded_edittext"
  6. android:orientation="horizontal"
  7. android:padding="5dp" >
  8.   
  9. <RadioButton
  10. android:id="@+id/radio0"
  11. style="@style/layout_horizontal"
  12. android:layout_gravity="center_horizontal"
  13. android:layout_weight="1"
  14. android:checked="true"
  15. android:text="均分" />
  16.   
  17. <RadioButton
  18. android:id="@+id/radio1"
  19. style="@style/layout_horizontal"
  20. android:layout_gravity="center_horizontal"
  21. android:layout_weight="1"
  22. android:text="个人" />
  23.   
  24. <RadioButton
  25. android:id="@+id/radio2"
  26. style="@style/layout_horizontal"
  27. android:layout_gravity="center"
  28. android:layout_weight="1"
  29. android:text="借贷" />
  30. </RadioGroup>



其中

[html] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. android:background="@drawable/rounded_edittext"



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

rounded_edittext.xml的代码如下


[html] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle" >
  4.   
  5. <solid android:color="#ffffff" />
  6.   
  7. <corners android:radius="7dip" />
  8.   
  9. <stroke
  10. android:width="2px"
  11. android:color="#000000" />
  12.   
  13. </shape>



放置在drawable文件夹下即可


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

speeddial_fragment_pay1.xml


[html] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:layout_margin="5dp"
  6. android:background="@drawable/rounded_edittext"
  7. android:orientation="vertical" >
  8.   
  9. <Button
  10. android:id="@+id/Button04"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:layout_centerHorizontal="true"
  14. android:layout_centerVertical="true"
  15. android:text="Button" />
  16.   
  17. </RelativeLayout>



3.(重要)在主布局文件中添加Fragment的载体,比如一个framlayout,负责承载fragment

在上面的RadioGroup的布局下增加:


[html] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. <FrameLayout
  2. android:id="@+id/fragment_container"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" />



这样布局就完成了

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

SpeeddialFragmentOne.java


[java] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. package
  2.   
  3. import
  4. import
  5. import
  6. import
  7. import
  8.   
  9. import
  10.   
  11. public class SpeeddialFragmentOne extends
  12.   
  13.   
  14. @Override
  15. public void
  16. // TODO Auto-generated method stub
  17. super.onCreate(savedInstanceState);  
  18.     }  
  19.   
  20.       
  21. @Override
  22. public
  23.             Bundle savedInstanceState) {  
  24. // TODO Auto-generated method stub
  25. return inflater.inflate(R.layout.speeddial_fragment_pay1, container, false);  
  26.     }  
  27. }  



这个Fragment非常简单,没有添加任何的逻辑,仅仅只是在onCreateView的要布局然后以View返回。Fragment有很多方法,可以根据自己的需要进行重载,这里就不多说了,自己到用的时候自然就知道了。

类似地,建立另外两个Fragment ,改变的仅仅是


[java] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


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



5.在主Activity中调用:

MainActivity.java


[java] ​​ view plain​​ ​​copy​​ ​​print​​ ​​?​​


  1. /**
  2.  * 主Activity
  3.  * 
  4.  * @author Gracker Gao
  5.  * @date 2012.8.15
  6.  */
  7. package
  8.   
  9. import
  10. import
  11. import
  12. import
  13. import
  14. import
  15.   
  16. import
  17. import
  18. import
  19. import
  20.   
  21. public class MainActivity extends
  22.   
  23. private final String TAG = "SpeedDialActivity";  
  24.   
  25. private
  26. private
  27. private
  28. private
  29.       
  30. private
  31.   
  32. public void
  33. super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.speeddial);  
  35.           
  36.         init_date();  
  37.         setupWidgets();  
  38.     }  
  39.       
  40. private void
  41.         transaction = getFragmentManager()  
  42.                 .beginTransaction();  
  43. if (null
  44. new
  45.         }  
  46.         transaction.add(R.id.fragment_container,  
  47.                 mSpeeddialFragmentOne);  
  48. // Commit the transaction
  49.         transaction.commit();  
  50.     }  
  51.   
  52. private void
  53.   
  54.         mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup1);  
  55. new
  56.   
  57. @Override
  58. public void onCheckedChanged(RadioGroup group, int
  59. // TODO Auto-generated method stub
  60.   
  61. switch
  62. case
  63. "setupWidgets():radio0 clicked");  
  64. if (null
  65. new
  66.                     }  
  67.                     transaction = getFragmentManager()  
  68.                             .beginTransaction();  
  69.                     transaction.replace(R.id.fragment_container,  
  70.                             mSpeeddialFragmentOne);               
  71. // Commit the transaction
  72.                     transaction.commit();  
  73. break;  
  74. case
  75. "setupWidgets():radio1 clicked");  
  76. if (null
  77. new
  78.                     }  
  79.                     transaction = getFragmentManager()  
  80.                             .beginTransaction();  
  81.                     transaction.replace(R.id.fragment_container,  
  82.                             mSpeeddialFragmentTwo);                   
  83. // Commit the transaction
  84.                     transaction.commit();  
  85. break;  
  86. case
  87. "setupWidgets():radio2 clicked");  
  88.   
  89. if (null
  90. new
  91.                     }  
  92.                     transaction = getFragmentManager()  
  93.                             .beginTransaction();  
  94.                     transaction.replace(R.id.fragment_container,  
  95.                             mSpeeddialFragmentThree);                     
  96. // Commit the transaction
  97.                     transaction.commit();  
  98. break;  
  99.   
  100. default:  
  101. break;  
  102.                 }  
  103.             }  
  104.         });  
  105.     }  
  106.   
  107. @Override
  108. protected void
  109. // TODO Auto-generated method stub
  110. super.onResume();  
  111.   
  112.     }  
  113.   
  114. @Override
  115. protected void
  116. // TODO Auto-generated method stub
  117. super.onDestroy();  
  118. // dataEncapsulation.closeDataBase_speedDial();
  119.     }  
  120.   
  121. }  



init_data()函数中主要是初始化值,包括初始化用户第一个看到的Fragment

在RadioGroup的onCheckedChangeLinsteer中,切换Fragment。关于Fragment的一些操作,比如增加,删除,替换等等,可以参照这个帖子:​​http://www.eoeandroid.com/thread-71642-1-1.html​​ 讲的很详细,我也不想重复。


这个Demo就不提供下载了,毕竟不是很难,所有的东西都交代了,自己敲一遍收获总是比打开别人的代码来研究要好的多。

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