android Fragment实现APP主界面Tab页面切换和点击事件
2015-08-16 23:20
871 查看
Fragment 页面切换不能滑动 所以对于listview 可以添加的左右滑动事件 ,不会有冲突例如(QQ的好友列表的删除)
Fragment 和viewpager 的区别
Viewpager 的事件都需要写在 MainActivity 使得 MainActivity 类非常冗余
Fragment 内部的事件则可以由其内部去处理分成多个类。便于维护和管理 MainActivity 只起到一个调度的作用
效果图
源代码我已上传资源页
Fragment实现页面切换和点击事件
(注意引用时要全部引用这个android.support.v4.app)
MainActivity .java
三个Fragment (请注意第二个有点击事件)
Fragment1.java
Fragment2.java
Fragment3.java
布局文件xml
activity_main.xml(小技巧 用include 引用xml 可以提高代码的重用性,并且方便维护和管理)
bottom.xml 底部菜单
tab1.xml
(三个tab布局都只是添加了一个背景图片和前篇博客viewpager 一样)
tab2.xml
tab3.xml
Fragment 和viewpager 的区别
Viewpager 的事件都需要写在 MainActivity 使得 MainActivity 类非常冗余
Fragment 内部的事件则可以由其内部去处理分成多个类。便于维护和管理 MainActivity 只起到一个调度的作用
效果图
源代码我已上传资源页
Fragment实现页面切换和点击事件
(注意引用时要全部引用这个android.support.v4.app)
MainActivity .java
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.TextView; public class MainActivity extends FragmentActivity implements OnClickListener { private TextView t1; private TextView t2; private TextView t3; private Fragment tab1; private Fragment tab2; private Fragment tab3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); initEvent(); setSelect(0); } /* * 初始化点击 */ private void initEvent() { // TODO Auto-generated method stub t1.setOnClickListener(this); t2.setOnClickListener(this); t3.setOnClickListener(this); } //初始化 private void initView() { t1 = (TextView) findViewById(R.id.text1); t2 = (TextView) findViewById(R.id.text2); t3 = (TextView) findViewById(R.id.text3); } /** * 将tab 的text 初始化 */ public void reset() { t1.setText("标题1"); t2.setText("标题2"); t3.setText("标题3"); } //设置Fragment内容区域 private void setSelect(int i) { FragmentManager fm=getSupportFragmentManager(); FragmentTransaction trs=fm.beginTransaction(); //隐藏Fragment hideFragment(trs); // 把text 切换为选中 switch (i) { case 0: if(tab1==null) { tab1=new Fragment1(); trs.add(R.id.id_content, tab1); }else { trs.show(tab1); } t1.setText("选中"); break; case 1: if(tab2==null) { tab2=new Fragment2(); trs.add(R.id.id_content, tab2); }else { trs.show(tab2); } t2.setText("选中"); break; case 2: if(tab3==null) { tab3=new Fragment3(); trs.add(R.id.id_content, tab3); }else { trs.show(tab3); } t3.setText("选中"); break; default: break; } trs.commit(); } /* * 隐藏所有的Fragment */ private void hideFragment(FragmentTransaction trs) { if(tab1!=null) { trs.hide(tab1); } if(tab2!=null) { trs.hide(tab2); } if(tab3!=null) { trs.hide(tab3); } } @Override public void onClick(View v) { reset(); switch (v.getId()) { case R.id.text1: setSelect(0); break; case R.id.text2: setSelect(1); break; case R.id.text3: setSelect(2); break; default: break; } } }
三个Fragment (请注意第二个有点击事件)
Fragment1.java
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { private View tab1view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { tab1view=inflater.inflate(R.layout.tab1, container, false); return tab1view; } }
Fragment2.java
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; public class Fragment2 extends Fragment { private View tab2view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { tab2view=inflater.inflate(R.layout.tab2, container, false); Button button=(Button)tab2view.findViewById(R.id.button2); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getActivity(), "点击了我", Toast.LENGTH_SHORT).show(); } }); return tab2view; } }
Fragment3.java
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment3 extends Fragment { private View tab3view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { tab3view=inflater.inflate(R.layout.tab3, container, false); return tab3view; } }
布局文件xml
activity_main.xml(小技巧 用include 引用xml 可以提高代码的重用性,并且方便维护和管理)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#EEEEEE" android:orientation="vertical" > <FrameLayout android:id="@+id/id_content" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > </FrameLayout> <include layout="@layout/bottom"/> </LinearLayout>
bottom.xml 底部菜单
<?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="45dp" android:orientation="horizontal" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="标题1" android:textColor="#000000" android:textSize="18.0dip" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="标题2" android:textColor="#000000" android:textSize="18.0dip" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="标题3" android:textColor="#000000" android:textSize="18.0dip" /> </LinearLayout>
tab1.xml
(三个tab布局都只是添加了一个背景图片和前篇博客viewpager 一样)
<?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:background="@drawable/image20" android:orientation="vertical" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
tab2.xml
<?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:background="@drawable/image29" android:orientation="vertical" > <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
tab3.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@drawable/image1" android:layout_height="match_parent" android:orientation="vertical" > <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories