ViewPager中动态添加XML布局文件,并获取XML文件中控件ID的操作(inflate)

Step 1: 布局文件中添加viewpager和切换页面button

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context="com.phenix.iot_v1_tab.MainActivity" >      
  6.       
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/viewPagerId"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.          />    
  12.       
  13.     <!--  -->  
  14.     lay1.xml-----  
  15.     <LinearLayout   
  16.         android:id="@+id/mainBtnLinearId"  
  17.         android:layout_width="fill_parent"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_alignParentBottom="true"  
  20.         android:orientation="horizontal"  
  21.         >  
  22.           
  23.         <Button   
  24.             android:id="@+id/settingCtrlPageBtnId"  
  25.             android:layout_width="match_parent"  
  26.             android:layout_height="wrap_content"  
  27.             android:layout_weight="1"  
  28.             android:layout_alignParentBottom="true"  
  29.             android:gravity="center"  
  30.             android:text="Setting"  
  31.             />  
  32.       
  33.         <Button  
  34.             android:id="@+id/dataStatusPageBtnId"  
  35.             android:layout_width="match_parent"  
  36.             android:layout_height="wrap_content"  
  37.             android:layout_alignParentBottom="true"  
  38.             android:layout_weight="1"  
  39.             android:layout_toRightOf="@id/settingCtrlPageBtnId"  
  40.             android:gravity="center"  
  41.             android:text="Data"  
  42.             />  
  43.       
  44.         <Button  
  45.             android:id="@+id/chartStatusPageBtnId"  
  46.             android:layout_width="match_parent"  
  47.             android:layout_height="wrap_content"  
  48.             android:layout_alignParentBottom="true"  
  49.             android:layout_weight="1"  
  50.             android:layout_toRightOf="@id/dataStatusPageBtnId"  
  51.             android:gravity="center"  
  52.             android:text="Chart"  
  53.             />  
  54.                      
  55.     </LinearLayout>  
  56.      
  57. </RelativeLayout></span>  
注意: viewpage和button的前后关系,如果颠倒,button的单击和viewpage的滑动事件有影响,原因也不知道。


Step 2: 添加布局文件,右键res


本例中添加三个布局文件,如上图蓝框所示


Step 3: MainActivity中添加相关变量

本例中有三个切换页面按钮:set / data / chart,在set page中有一个set gain按钮

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">//定义ViewPager变量  
  2.     ViewPager pager = null;  
  3.     View viewPager_set;  
  4.     View viewPager_data;  
  5.     View viewPager_chart;  
  6.     ArrayList<View> viewContainter = new ArrayList<View>();  
  7.     //定义ViewPager Button变量  
  8.     private Button setPageBtn;  
  9.     private Button dataPageBtn;  
  10.     private Button chartPageBtn;  
  11.       
  12.     //定义setPage中Button变量  
  13.     private Button setGain_setPage_Btn;</span>  

在OnCreate中初始化viewpage和各相关控件

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">@Override  
  2.     protected void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         setContentView(R.layout.activity_main);  
  5.           
  6.         //初始化ViewPager  
  7.         InitViewPager();  
  8.           
  9.         //ViewPager绑定页面滑动监听器  
  10.         pager.addOnPageChangeListener(new viewPagerOnPageChangeListener());  
  11.           
  12.         //初始化ViewPager的页面切换按钮  
  13.         InitViewPagerSwitchBtn();  
  14.           
  15.         //Bluetooth初始化  
  16.         m_BusinessBluetooth = new BlueToothProcess(this);  
  17.         m_BusinessBluetooth.CreatePortListen();  
  18.           
  19.         //初始化set page  
  20.         InitSetPage();  
  21.           
  22.         //set page监听器处理  
  23.         setPageListenerProcess();                     
  24.               
  25.     }</span>  

step 4: 初始化viewpager控件具体代码

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">/* 
  2.      * 初始化ViewPager 
  3.      */  
  4.     public void InitViewPager() {  
  5.           
  6.         //实例化ViewPager  
  7.         pager = (ViewPager)findViewById(R.id.viewPagerId);        
  8.           
  9.         //为viewPager设置内容  
  10.         //view是我们放进viewPager里面的东西,要为它设置好布局,再放进去  
  11.         viewPager_set = LayoutInflater.from(this).inflate(R.layout.setting_control, null);  
  12.         viewPager_data = LayoutInflater.from(this).inflate(R.layout.data_status, null);  
  13.         viewPager_chart = LayoutInflater.from(this).inflate(R.layout.chart_status, null);  
  14.           
  15.         //这是个ArrayList,加进去了3个view  
  16.         viewContainter.add(viewPager_set);  
  17.         viewContainter.add(viewPager_data);  
  18.         viewContainter.add(viewPager_chart);          
  19.           
  20.         //设置适配器  
  21.         pager.setAdapter(new PagerAdapter() {  
  22.               
  23.             @Override  
  24.             public boolean isViewFromObject(View arg0, Object arg1) {  
  25.                 // TODO Auto-generated method stub  
  26.                 //return false;  
  27.                 return arg0 == arg1;  
  28.             }  
  29.               
  30.             //viewpager中的组件数量  
  31.             @Override  
  32.             public int getCount() {  
  33.                 // TODO Auto-generated method stub  
  34.                 return viewContainter.size();  
  35.             }  
  36.   
  37.             @Override  
  38.             public void destroyItem(View container, int position, Object object) {  
  39.                 // TODO Auto-generated method stub  
  40.                 //super.destroyItem(container, position, object);  
  41.                 ((ViewPager)container).removeView(viewContainter.get(position));  
  42.             }  
  43.   
  44.             @Override  
  45.             public int getItemPosition(Object object) {  
  46.                 // TODO Auto-generated method stub  
  47.                 return super.getItemPosition(object);                 
  48.             }  
  49.   
  50.             @Override  
  51.             public Object instantiateItem(ViewGroup container, int position) {  
  52.                 // TODO Auto-generated method stub  
  53.                 //return super.instantiateItem(container, position);  
  54.                 ((ViewPager)container).addView(viewContainter.get(position));  
  55.                 return viewContainter.get(position);  
  56.             }  
  57.               
  58.               
  59.         });  
  60.           
  61.     }</span>  


step 5: viewpager页面滑动监听器代码

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">/* 
  2.      * ViewPager页面滑动监听器 
  3.      */  
  4.     class viewPagerOnPageChangeListener implements OnPageChangeListener{  
  5.   
  6.         @Override  
  7.         public void onPageSelected(int pItem) {  
  8.             // TODO Auto-generated method stub  
  9.               
  10.             switch (pItem) {  
  11.                   
  12.             //如果是第一个页面  
  13.             case 0:  
  14.                 setPageBtn.setText("V");  
  15.                 dataPageBtn.setText("Data");  
  16.                 chartPageBtn.setText("Chart");  
  17.                 System.out.println("Set Page");  
  18.                 break;  
  19.             //如果是第二个页面  
  20.             case 1:  
  21.                 setPageBtn.setText("Set");  
  22.                 dataPageBtn.setText("V");  
  23.                 chartPageBtn.setText("Chart");  
  24.                 System.out.println("Data Page");  
  25.                 break;  
  26.             //如果是第三个页面  
  27.             case 2:  
  28.                 setPageBtn.setText("Set");  
  29.                 dataPageBtn.setText("Data");  
  30.                 chartPageBtn.setText("V");  
  31.                 System.out.println("Chart Page");  
  32.             break;  
  33.             }  
  34.               
  35.         }  
  36.           
  37.         @Override  
  38.         public void onPageScrolled(int arg0, float arg1, int arg2) {  
  39.             // TODO Auto-generated method stub  
  40.               
  41.         }  
  42.           
  43.         @Override  
  44.         public void onPageScrollStateChanged(int arg0) {  
  45.             // TODO Auto-generated method stub  
  46.               
  47.         }  
  48.           
  49.     }</span>  

Step 6: 页面切换按钮功能实现

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">/** 
  2.      * 初始化ViewPager切换按钮 
  3.      */  
  4.     public void InitViewPagerSwitchBtn() {  
  5.           
  6.         //绑定控件ID  
  7.         setPageBtn = (Button)this.findViewById(R.id.settingCtrlPageBtnId);  
  8.         dataPageBtn = (Button)this.findViewById(R.id.dataStatusPageBtnId);  
  9.         chartPageBtn = (Button)this.findViewById(R.id.chartStatusPageBtnId);  
  10.           
  11.         //设置按钮跳转到对应的viewPager页面  
  12.         setPageBtn.setOnClickListener(new View.OnClickListener() {  
  13.               
  14.             @Override  
  15.             public void onClick(View v) {  
  16.                 // TODO Auto-generated method stub  
  17.                 pager.setCurrentItem(0);  
  18.                 System.out.println("SettingPage");  
  19.                   
  20.                 Toast toast= Toast.makeText(getApplicationContext(), "测试", Toast.LENGTH_SHORT);  
  21.                 toast.show();                 
  22.             }  
  23.         });  
  24.           
  25.         dataPageBtn.setOnClickListener(new View.OnClickListener() {  
  26.               
  27.             @Override  
  28.             public void onClick(View v) {  
  29.                 // TODO Auto-generated method stub  
  30.                 pager.setCurrentItem(1);  
  31.                 System.out.println("DataPage");  
  32.             }  
  33.         });  
  34.           
  35.         chartPageBtn.setOnClickListener(new View.OnClickListener() {  
  36.               
  37.             @Override  
  38.             public void onClick(View v) {  
  39.                 // TODO Auto-generated method stub  
  40.                 pager.setCurrentItem(2);  
  41.                 System.out.println("ChartPage");  
  42.             }  
  43.         });   
  44.           
  45.     }</span>  

step 7: 获取子view中的控件(set gain button)并绑定对应操作监听器

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">/* 
  2.      * 初始化set page 
  3.      */  
  4.     public void InitSetPage() {  
  5.           
  6.         //获取setting view button  
  7.         setGain_setPage_Btn = (Button)viewPager_set.findViewById(R.id.setGainBtnId);  
  8.     }  
  9.       
  10.       
  11.     /* 
  12.      * set page监听器绑定 
  13.      */  
  14.     public void setPageListenerProcess() {  
  15.         setGain_setPage_Btn.setOnClickListener(new setGainBtnSetPageOnClickListener());  
  16.     }  
  17.       
  18.       
  19.     /* 
  20.      * set page  
  21.      * set gain button listener 
  22.      */  
  23.     class setGainBtnSetPageOnClickListener implements OnClickListener {  
  24.   
  25.         @Override  
  26.         public void onClick(View v) {  
  27.             // TODO Auto-generated method stub  
  28.             Toast toast= Toast.makeText(getApplicationContext(), "view测试", Toast.LENGTH_SHORT);  
  29.             toast.show();  
  30.         }  
  31.           
  32.     }</span>  

获取子view控件的方法重点讲一下:

首先通过inflate得到各个子view的对象

View viewPager_set = LayoutInflater.from(this).inflate(R.layout.setting_control, null);   //setting_control就是step2中添加的子view布局文件的名称

然后通过子view对象,获取其内的控件ID

Button setGain_setPage_Btn = (Button)viewPager_set.findViewById(R.id.setGainBtnId);



参考文章:

viewpager的使用 http://blog.csdn.net/phenixyf/article/details/51280690

获取子view控件的操作 http://blog.csdn.net/phenixyf/article/details/51396570









  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值