Android用Fragment创建选项卡

作者:wuyudong 时间:2022-01-12 09:30:36 

本文结合之前的动态创建fragment来进行一个实践,来实现用Fragment创建一个选项卡

项目布局


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal" >

<TextView
  android:id="@+id/tab1"
  android:layout_width="0dip"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:gravity="center"
  android:text="社会新闻" />

<TextView
  android:id="@+id/tab2"
  android:layout_width="0dip"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:gravity="center"
  android:text="生活新闻" />

<TextView
  android:id="@+id/tab3"
  android:layout_width="0dip"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:gravity="center"
  android:text="军事新闻" />

<TextView
  android:id="@+id/tab4"
  android:layout_width="0dip"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:gravity="center"
  android:text="娱乐新闻" />
</LinearLayout>

<LinearLayout
 android:id="@+id/content"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" >
</LinearLayout>

</LinearLayout>

新建Fragment1.java~Fragment4.java,其中Fragment1.java中的代码如下:


public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
 return inflater.inflate(R.layout.fragment1, null);
}

}

其他几个文件的代码类似

新建fragment1.xml~fragment4.xml,其中fragment1.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:gravity="center"
android:orientation="vertical" >

<TextView
 android:id="@+id/textview1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="社会新闻"
 android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>

其他几个文件的代码类似

MainActivity.java中的代码如下:


public class MainActivity extends Activity implements OnClickListener {

private LinearLayout content;
private TextView tv1, tv2, tv3, tv4;
private FragmentManager fm;
private FragmentTransaction ft;

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

content = (LinearLayout) findViewById(R.id.content);

tv1 = (TextView) findViewById(R.id.tab1);
 tv2 = (TextView) findViewById(R.id.tab2);
 tv3 = (TextView) findViewById(R.id.tab3);
 tv4 = (TextView) findViewById(R.id.tab4);

tv1.setOnClickListener(this);
 tv2.setOnClickListener(this);
 tv3.setOnClickListener(this);
 tv4.setOnClickListener(this);

fm = getFragmentManager();
 ft = fm.beginTransaction();
 ft.replace(R.id.content, new Fragment1()); // 默认情况下Fragment1

}

@Override
public void onClick(View v) {
 ft = fm.beginTransaction();
 switch (v.getId()) {
 case R.id.tab1:
  ft.replace(R.id.content, new Fragment1());
  break;
 case R.id.tab2:
  ft.replace(R.id.content, new Fragment2());
  break;
 case R.id.tab3:
  ft.replace(R.id.content, new Fragment3());
  break;
 case R.id.tab4:
  ft.replace(R.id.content, new Fragment4());
  break;

default:
  break;
 }
 ft.commit();

}

}

运行项目后如下效果:

Android用Fragment创建选项卡


/**
* Created by gerry.zhong on 2016/10/11.
*/
var gerry =
(function(){
 //创建一个独立的对象,注入所有的方法,包括你想抛出去和不想抛出去的
 var tool = {
   AAAA:function(){},
   BBBB:function(){
     console.log("我只想内部使用,不想给别人用");
   }
 };

/*
 * 该对象承载所有需要抛出去的对象
 *  1.该对象中的方法可以自己写
 *  2.该对象中的方法可以注入(例子中的tempObj.tool.AA)
 *  3.该对象也可以选择性抛出给使用者需要的方法,也可以隐藏(tool.BBBB)
 * */
 var tempObj ={
   //reader为一些初始化需要的操作,有时候会有注册事件等,或者一些预操作
   reader:function(){
   },
   //注入所有的选择器,方便选择器变化,直接修改该对象中的选择器,而不需要全局去更改
   selector:{
     mySelector:"#mySelector", //原密码
   },
   //注入所有的接口地址,方便接口变化可以进行,快速变更,不需要全局找引用的对象
   interface:{
     loginUrl:"",
   },
   //注入page中所有的事件,统一管理,建议命名规范:事件_命名,例 click_login
   registerEle:{
     click_login:function(){
       //注册单击事件
     }
   },
   //注入所有ajax请求,页面所有请求,将在这里统一管理,建议命名规范:ajax_命名,例 ajax_login
   /*
   * 该请求中有2种方案,看需求使用
   * 1.不公用一个请求方案
   * 2.公用一个请求,但是回调处理不一样
   * */
   ajaxRequest:{
     //不公用一个请求方案
     ajax_login:function(){
       $.post("","",function(data){
         tempObj.callback.call_login(data);
       });
     },
     //会有多个业务公用这个请求
     ajax_login_T:function(callback){
       //所有接口地址从interface中获取,callback中tempObj.callback中处理
       $.post("","",callback);
     },
   },
   //处理所有回调函数,针对一个请求,处理一个回调
   callback:{
     //不共用请求处理回调
     call_login:function(data){
       //处理回调
     },
     //公用请求处理回调
     call_login_T:function(){
       var temp = function(){

};
       tempObj.ajaxRequest.ajax_login_T(temp);
     }
   },
   //所有使用的工具类,如果每个项目都单独的unit.js或者common.js等存放一些公共方法的,这里可以不使用
   // PS:这里存放的只是仅针对于这个页面处理的一些tool,一般没必要抛出去,不过看业务而定
   tool:{
     A:function(){
       console.log("我是自己写的方法");
     },
     AA:tool.AAAA,  //这是我想抛出去给别人用的东西
   },
   //临时缓存存放区域,仅针对本页面,如果跨页面请存放cookie或者localstorage等
   //主要解决有时候会使用页面控件display来缓存当前页面的一些数据
   temp:{

},
   /*
   * 业务使用区域,针对每个特别的业务去串上面所有的一个个原子
   *  因为上面所有的方法,只是做一件事,这边可以根据业务进行串服务,很简单的
   * */
   firm:{

}
 };
 /*
 * 闭包抛出去的方法
 * */
 var outputObj =function(){
   //首先执行reader方法,初始化一些操作,比如注册事件啥啥啥的
   tempObj.reader();
   /*
   * 抛出给别人使用的对象
   *  想给别人看和使用的东西,可以注入tempObj对象,就像tool中的AA的方式
   *  不想给别人看和使用的东西,就像内部tool对象中的BBBB方法,你内部可以使用,外部是无法引用的
   * */
   return tempObj;
 }

//抛出你希望抛出去的对象,因为你掌控了所有,哈哈。
 return new outputObj();
})();

来源:http://www.cnblogs.com/wuyudong/p/5898075.html

标签:Android,Fragment,选项卡
0
投稿

猜你喜欢

  • Java为什么基本数据类型不需要进行创建对象?

    2022-03-16 08:59:03
  • 一文详解Android无需权限调用系统相机拍照

    2022-06-22 03:08:26
  • android端使用openCV实现车牌检测

    2023-02-26 07:50:50
  • C++实现俄罗斯方块源码

    2023-06-27 23:49:14
  • Android 事件分发详解及示例代码

    2023-09-08 05:18:45
  • Android离线Doc文档访问速度慢的有效解决方法

    2021-06-27 02:10:39
  • WinForm实现读取Resource中文件的方法

    2021-05-25 18:29:45
  • Spring-boot 2.3.x源码基于Gradle编译过程详解

    2022-04-07 15:41:36
  • java语言基础之标识符和命名规则详解

    2023-04-21 16:50:18
  • Android viewpager中动态添加view并实现伪无限循环的方法

    2022-11-17 12:59:08
  • 从java中调用matlab详细介绍

    2023-08-01 14:04:17
  • Java文件上传与文件下载实现方法详解

    2023-11-20 12:28:45
  • textView 添加超链接(两种实现方式)

    2021-08-12 12:58:27
  • 如何使用JCTools实现Java并发程序

    2023-11-21 07:37:39
  • Javaweb实现在线人数统计代码实例

    2023-01-17 10:19:24
  • 死磕 java同步系列之synchronized解析

    2023-09-27 10:07:43
  • Java 数据结构与算法系列精讲之排序算法

    2023-11-01 13:25:40
  • spring cloud oauth2 feign 遇到的坑及解决

    2022-06-15 13:06:06
  • Spring超详细讲解面向对象到面向切面

    2021-12-28 15:15:57
  • C#采用OpenXml实现给word文档添加文字

    2022-06-13 09:48:46
  • asp之家 软件编程 m.aspxhome.com