一周知识总结

1.Common Layout 基础(四大布局)

1.RelativeLayout(相对布局)
1)设置距parent布局的距离:align_xxxx  
2)t设置View控件位于哪个控件的位置:toStartOf,toEndOf,below,above,....
4)设置位于父View的位置:layout_alignWithParent(true,false)
5)居中显示:layout_center

2.LinearLayout(线性布局)
1)设置元素排列顺序:orientation(横向纵向排列)
2)设置权重:weight
3)设置元素的位置:layout_gravity

3.GridLayout (网格布局,以网格形式对页面元素进行规划,设置);
1)列的数量:columnCount 
2) 行的数量:rowCount
3)第几列,下标从0开始:layout_column
4)水平填充:layout_gravity
5)跨列合并行:layout_columnSpan
6)跨行合并列:layout_rowSpan


4.FrameLayout(帧布局,以层次结构默认从左上角开始布局)
1)指定元素位置,对齐方式:layout_gravity 


Common Layout 优化

1.优化view层次体系,view对象个数。
1)借助merge标签合并相同元素(例如连续两个framelayout嵌套)
a)merge在文档中必须是根元素
b)merge中定义的属性会参考父容器(parent)中相同元素的属性
2)从设计角度出发,要考虑层次体系(采用不同方式设计一个list item布局)

2.优化view加载时机(采用延迟加载策略):何时需要何时加载
a)在布局文件中借助ViewStub元素引入其它相关布局文件
b)在Android的java代码中需要时执行ViewStub对象的inflate方法加载布局

3.优化view维护时间(可以考虑布局重用)
a)借助include标签包含其它通用布局(各个页面中相同的部分)

<RelativeLayout 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"
    tools:context=".MainActivity" >
    <!-- 动态包含其他布局 -->
	<include layout="@layout/page_tilte"/>

</RelativeLayout>

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal"
    android:textSize="24sp"
    android:gravity="center"
    android:id="@+id/titleId"
    android:background="#00000000"
    android:textColor="#00ffffff"
    >
</TextView>

 
</pre><p></p><p></p>1.Adapter Layout 1)是一个ViewGroup(视图组,容器)2)是一个Adapter View(适配视图)2.Adapter Layout 常用类型1)ListView   (列表容器)2)GridView  (网格容器)3)Spinner     (下拉列表)4)ViewPager(分页容器)5).....................3.Adapter Layout 的构成及原理分析1)构成:a)适配容器 (Adapter Layout)b)适配器(Adapter)c)资源(Context,view,data)2)原理:对于一个Adapter Layout对象的构建,需要通过一个adapter对象,将相关资源构建成item,然后将这些item交给相关Adapter Layout对象显示。4.Adapter Layout 应用中涉及到的相关Adapter1)一个接口(ListAdapter)2)一个抽象(BaseAdapter)3)三个具体:(ArrayAdapter,SimpleAdapter,CursorAdapter)4)一个扩展:(PagerAdapter,应用于viewPager)5)一种自定义(直接或间接的继承BaseAdapter)-----------------------------------------------------------------------------------Adpater Layout 基础(ListView 布局)1.ListView1)一个View (呈现数据)2)一个ViewGroup (布局,规划view)3)一个AdapterView(数据的加载需要借助adapter)4)一个列表容器(以列表形式呈现数据)2.ListView的应用场合借助listview以列表形式呈现数据非常方便。1)微信好友列表2)QQ好友列表3)股票信息列表4)软件列表5)联系人列表6)通话记录列表7)新闻列表,....3.ListView 应用的基本实现ListView 的构成及其实现原理符合Adapter Layout.1)获得Listview对象(findViewById,new ListView(this))2)构建适配器,借助适配器对象构建列表项对象(list item)3)ListView 关联适配器(底层会借助adapter提取item)<p></p><pre name="code" class="java">//1)获得Listview对象(findViewById,new ListView(this))
ListView lsv = (ListView) findViewById(R.id.lsvId);
//2)构建适配器,借助适配器对象构建列表项对象(list item)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,//Context(资源方法对象)
android.R.layout.simple_list_item_1, // (resource,构建item的布局模板)
new String[] { "A", "B", "C", "D" });
//3)ListView 关联适配器(底层会借助adapter提取item)
lsv.setAdapter(adapter);

4.ListView 相关适配应用
相关API:(ListAdapter)
1)ArrayAdapter
a)构建(参考构造方法)
b)场合(item 数据为:8种基本数据类型+string)

List<String> list=new ArrayList<String>();
list.add("A");list.add("B");list.add("C");
//1)获得Listview对象(findViewById,new ListView(this))
ListView lsv = (ListView) findViewById(R.id.lsvId);
//2)构建适配器,借助适配器对象构建列表项对象(list item)
ArrayAdapter<String> adapter = 
new ArrayAdapter<String>(this,//Context(资源方法对象)
android.R.layout.simple_list_item_2, // (resource,构建item的布局模板)
android.R.id.text1,
list);
//3)ListView 关联适配器(底层会借助adapter提取item)
lsv.setAdapter(adapter);


2)SimpleAdapter
a)构建(参考构造方法)
b)场合(item 数据为:Map<String,?>)

List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
	{
	 for(int i=0;i<images.length;i++){
	    Map<String,Object> map=new HashMap<String, Object>();
	    map.put("logo",images[i]);
	    map.put("name","City"+i);
	    list.add(map);//一个map对应listview中的item


3)BaseAdapter(抽象类)
a)构建(构建其子类类型对象,例如自定义适配器)
b)场合(官方给定的适配器不满足我们需求时)

new ArrayAdapter<Map<Integer,String>>(
		this,android.R.layout.simple_list_item_2, list){
		  public View getView(int position, View convertView, ViewGroup parent) {
		      //1.item view
			  View v=View.inflate(getContext(),
			  android.R.layout.simple_list_item_2,null);
			  //2.item data
			  Map<Integer,String> map=
			  getItem(position);
			  //3.对号入座
			  TextView tv1=(TextView) v.findViewById(android.R.id.text1);
			  TextView tv2=(TextView) v.findViewById(android.R.id.text2);
			  tv1.setText(map.get(1));
			  tv2.setText(map.get(2));
			  return v;
		}});
-----------------------------------------------------------------------------------
ListView 自定义适配的优化
1.适配器优化的目的
1)提高listview中item的显示效率.
2)改善用户体验。

2.适配器优化的方式(现阶段)

1)重用item view(饺子皮)
借助适配中convertView的值,实现item View的重用。
当listview中显示内容比较多,执行上下滑动时,滑出
的item会赋值给convertview.
   
FAQ
a)convertView 是什么?(列表项对象)
b)convertView 何时有值?(滑动listview时)
c)convertView 由谁赋值?(由底层系统赋值)
   
2)减少item view中子元素的查找次数
在getView方法中,对于item view而言假如需要设置其子元素的值,通常需要调用view的findViewById方法先找到对应的子元素。而查找的过程是一个耗时操作,所以我们要减少这个查找次数。在android中给出的解决方案通常是定义一个类(例如ViewHolder)借助此类中的属性记录item view中每个子元素的位置。

public View getView(int position, View convertView, ViewGroup parent) {
		//1.构建item view对象(饺子皮):参考mResource资源构建
		View v=null;
		ViewHolder vHolder=null;
		if(convertView==null){//listview页面初始化时,convertview的值是null的
		//inflate 方法的具体返回值类型对象由mResource的根元素决定
		//v=View.inflate(mContext, mResource, null);
		v=LayoutInflater.from(getContext())
		.inflate(mResource, parent,false);
		vHolder=new ViewHolder();//类似座位表(借助此对象记录item view中子元素的位置)
		//查找item view中的子元素,并在viewHolder中进行记录
		vHolder.iv=(ImageView) v.findViewById(R.id.imgId);
		vHolder.tv=(TextView) v.findViewById(R.id.text01);
		v.setTag(vHolder);//一个item view对象绑定一个viewHolder对象
		}else{
		v=convertView;//重用convertview,以减少item view的构建次数
		vHolder=(ViewHolder)v.getTag();
		}
		//2.获得item 数据对象(饺子馅)
		City c=(City)getItem(position);
		//3.对号入座(将饺子馅放到饺子皮对应位置)
		//3.1设置itemview 中子元素的值
		vHolder.iv.setImageResource(c.getLogo());
		vHolder.tv.setText(c.getName());
		return v;//包好的饺子(底层会将此对象添加到listview)
	}
	class ViewHolder{//view对象的持有者
		ImageView iv;
		TextView tv;
	}
ListView 的事件处理

1.ListView 事件类型
1)点击事件(短按,长按事件)

lsv.setOnItemClickListener(new OnItemClickListener() {
		    //回调函数
			//点击listview中的某个item时会自动执行此方法
			@Override
		    public void onItemClick(
		    AdapterView<?> parent,//ListView 
		    View view, //列表项对象(list item)
		    int position, //item 的位置
		    long id) {//item id,现阶段与item position相同
		    	//根据位置获得对应的item对象对应的数据
				//底层会调用适配器的getItem方法
				//此方法的返回值由getItem方法的返回值决定
				City city=(City)//
				parent.getItemAtPosition(position);
				Toast.makeText(getApplicationContext(),//Context
				city.getName(),//CharSequence
				0//duration
				).show();//显示信息
		    }
		});
public boolean onItemLongClick(
<span style="white-space:pre">	</span>AdapterView<?> parent,View view,int position, long id) {
<span style="white-space:pre">		</span>Toast.makeText(this, "onItemLongClick",0).show();
<span style="white-space:pre">		</span>return true;
<span style="white-space:pre">		</span>//返回值表示此事件是否已经处理结束;
<span style="white-space:pre">		</span>//假如事件已经处理结束,且其它事件不要则进行处理,则返回true
<span style="white-space:pre">	</span>    //返回false时,假如listview中还有其它事件,其它事件会继续执行


2)滚动事件(listview滚动时要进行如何处理)
/**滚动状态发生变化时执行*/
<span>	</span>@Override
<span>	</span>public void onScrollStateChanged(AbsListView view, int scrollState) {
<span>		</span>
<span>	</span>}
<span>	</span>/**滚动时执行此方法*/
<span>	</span>@Override
<span>	</span>public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
<span>		</span>
<span>	</span>}

2.ListView 事件监听器(观察者对象)
1)OnItemClickListener
2)OnItemLongClickListener
3)OnScrollListener

3.ListView 事件处理


1)添加事件监听器(关注添加方式及事件类型)
2)回调事件处理方法(属于监听器对象):关注业务
--------------------------------------------------------------------------------------------------------------------

ListView 中item的选择设置


1.ListView选择模式的设置(setChoiceModel(int model))
1)没选CHOICE_MODE_NONE
2)单选CHOICE_MODE_SINGLE
3)多选CHOICE_MODE_MULTIPLE

new ArrayAdapter<String>(this,
	    android.R.layout.simple_list_item_checked, list){
	    	@Override
	    	public View getView(int position, View convertView, ViewGroup parent) {
	    		View v=super.getView(position, convertView, parent);
	    		int checked=((ListView)parent)
	    		.getCheckedItemPosition();
	    		if(checked==position){
	    		v.setBackgroundColor(Color.GRAY);
	    		}else{
	    		v.setBackgroundColor(Color.WHITE);
	    		}
	    		return v;
	    	}
	    };



2.有选择性的指定适配器关联的item布局
android.R.layout.simple_list_item_checked

3.有选择性的设置点击过的内容高亮显示
1)添加监听器(OnItemClickListener)
2)每次点击刷新ListView(adapter.notifyDataSetChanged)
3)重写适配器的getView,在此方法中获得选中的
item的位置,根据位置判定是否让此view高亮显示。


4.有选择性对选中内容进行删除
1)获得选中的内容(SparseBooleanArray)
2)从数据集中删除选中内容(list.removeAll(...))
3)通知更新(ListView进行刷新)
4)清除选中选项(listview.clearChoices())

-----------------------------------------------------------------------------------------

ListView 中内容的分组(分块)


1.应用场合
1)数据量比较小,且是一次加载.
2)数据已经有序(一般是升序)


例如:
1)手机联系人
2)汽车品牌
3).....


2.具体实现


1)对数据进行排序(借助Collections的sort方法)
2)每个item都显示key(A,B,C)
3)同一个分块中第一个item显示key,其它item隐藏key
3.1)根据位置获得当前模块(分组)的名称(key)
int getSectionForPosition(int position){}
此方法的返回值为块名称的ASCII;
3.2)获得此模块中位置(position)最小的值
int getPositionForSection(int section){}
此方法参数为块名称的ASCII码值
3.3)显示模块中最小位置的item中的key,其它key隐藏

/**根据位置获得当前模块(分组)的名称(key)
	 * @return 此方法的返回值为块名称的ASCII;
	 * */
	public int getSectionForPosition(int position){
		return ((City)getItem(position)).getKey()
				.toUpperCase().charAt(0);
	}
	public int getPositionForSection(int section){
		for(int i=0;i<getCount();i++){//i为所有位置
			int sec=getSectionForPosition(i);
			if(sec==section)return i;//此位置为最小位置
		}
		return -1;
	}
------------------------------------------------------------------------------------------------------------------
ListView 分块中的右侧导航

1.右侧导航应用场合
构建于分块显示的基础上,希望能够快速定位某个模块。

2.右侧导航实现
1)在页面右侧再添加一个ListView
2)点击导航ListView中的item时,能够快速定位某个模块。
3)右侧列表点击过后高亮显示?
a)设置listview的选择模式
b)重写适配器的getview方法,判定位置的选中状态
c)点击item时刷新列表

3左侧列表在滑动时,右侧列表对应位置高显示
a)左侧列表添加滚动监听器
b)在listview滚动状态发生变化时,设置右侧列表高亮显示
b.1)获得左侧列表第一个item显示的位置
b.2)获得此位置对应的块(section)名称
b.3)获得此块名称在右侧列表中的位置
b.4)设置右侧列表此位置的item为选中状态
b.5)刷新右侧列表

public void onScrollStateChanged(AbsListView view, int scrollState) {
	   if(scrollState==
	   OnScrollListener.SCROLL_STATE_IDLE){
		   //获得第一个显示的item位置
		   int pos=view.getFirstVisiblePosition();
		   //获得此位置的块名称
		   char section=(char)//'A','B'
		   startAdapter.getSectionForPosition(pos);
		   //查找此块对应的右侧列表的位置
		   int rightPos=
		   chars.indexOf(String.valueOf(section));
		   Log.i("TAG", "rightPos="+rightPos);
		   //设置右侧对应位置选中
		   endLsv.setItemChecked(rightPos, true);
		   //刷新右侧列表
		   endAdapter.notifyDataSetChanged();
	   }
	}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
<span style="white-space:pre">		</span>if(requestCode==100&&resultCode==200){
<span style="white-space:pre">			</span>String name=data.getStringExtra("nameKey");
<span style="white-space:pre">			</span>MenuItem.setTitle(name);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public boolean onOptionsItemSelected(android.view.MenuItem item) {
<span style="white-space:pre">		</span>   //判定点击的菜单项是否是切换城市
<span style="white-space:pre">		</span>   //构建一个意图对象
<span style="white-space:pre">		</span>   //启动Activity
<span style="white-space:pre">		</span>   //startActivity(intent);


<span style="white-space:pre">		</span>if(item.getItemId()==R.id.cityId){
<span style="white-space:pre">			</span>Intent intent = new Intent(this,CityActivity.class);
<span style="white-space:pre">			</span>startActivityForResult(intent,100);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>return super.onOptionsItemSelected(item);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>protected void onActivityResult(int requestCode, int resultCode, Intent data) {
<span style="white-space:pre">		</span>if(requestCode==100&&resultCode==200){
<span style="white-space:pre">			</span>String name=data.getStringExtra("nameKey");
<span style="white-space:pre">			</span>MenuItem.setTitle(name);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
-------------------------------------------------------------------------------------------------------------------
ListView 的扩展对象ExpandableListView的应用

1.ExpandableListView 是什么
一个可分组的ListView


2.ExpandableListView 的应用场合
ExpandableListView 对象能够对列表分组中的
内容进行展开或收起,类似QQ中的我的好友,
我的同学,我的家人,....

3.ExpandableListView 应用的实现
1)获得ExpandableListView对象(应该在布局文件声明)
2)构建适配器对象(继承BaseExpandableListAdapter)
3)ExpandableListView关联适配器对象
4)有选择性的添加监听器(Listener)

 String groups[]={"A","B","C"};
String childs[][]={{"A1","A2","A3"},{"B1","B2"},{"C1","C2"}
setContentView(R.layout.activity_main);
<span style="white-space:pre">	</span>    //1.获得ExpandableListView
<span style="white-space:pre">		</span> ExpandableListView lsv=
<span style="white-space:pre">		</span> (ExpandableListView) 
<span style="white-space:pre">	</span>     findViewById(R.id.lsvId);
<span style="white-space:pre">		</span>//2.构建适配器对象
<span style="white-space:pre">		</span> ExpandableListAdapter adapter=
<span style="white-space:pre">		</span> new ExpAdapter();
<span style="white-space:pre">		</span>//3.关联适配器
<span style="white-space:pre">		</span> lsv.setAdapter(adapter);
lsv.setOnChildClickListener(new OnChildClickListener() {
<span style="white-space:pre">			</span>@Override
<span style="white-space:pre">			</span>public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
<span style="white-space:pre">				</span>Toast.makeText(getApplicationContext(),
<span style="white-space:pre">				</span>childs[groupPosition][childPosition], 0).show();
<span style="white-space:pre">				</span>return true;
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>});
<span style="white-space:pre">		</span>//默认展开第0个分组
<span style="white-space:pre">		</span>lsv.expandGroup(0); 
class ExpAdapter extends BaseExpandableListAdapter{
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public int getGroupCount() {
<span style="white-space:pre">			</span>return groups.length;
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public int getChildrenCount(int groupPosition) {
<span style="white-space:pre">			</span>return childs[groupPosition].length;
<span style="white-space:pre">		</span>}
        //getItem
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public Object getGroup(int groupPosition) {
<span style="white-space:pre">			</span>return groups[groupPosition];
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public Object getChild(int groupPosition, int childPosition) {
<span style="white-space:pre">			</span>return childs[groupPosition][childPosition];
<span style="white-space:pre">		</span>}
        //getItemId
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public long getGroupId(int groupPosition) {
<span style="white-space:pre">			</span>return groupPosition;
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public long getChildId(int groupPosition, int childPosition) {
<span style="white-space:pre">			</span>return childPosition;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>/**listview中的item的id是否是稳定的*/
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public boolean hasStableIds() {
<span style="white-space:pre">			</span>return false;//表示不稳定
<span style="white-space:pre">		</span>}
以上重写方法!

以下为包饺子

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
				ViewGroup parent) {
			//1.饺子皮
			View v=View.inflate(MainActivity.this,
			android.R.layout.simple_list_item_1,null);
			//2.饺子馅
			String item=(String)
			getChild(groupPosition, childPosition);
			//3.包起来
			((TextView)v).setText(item);
			return v;
		}
public boolean isChildSelectable(int groupPosition, int childPosition) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>return true;//表示子元素可以点击或选择
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}

-------------------------------------------------------
GridView 的应用

1.GridView 是什么
0)View
1)ViewGroup
2)AdapterView

2.GridView 的应用场合
GridView会以网格的形式显示ITEM对象,例如
1)手机相册
2)支付宝首页

3.GridView 的构建及原理(类似ListView)
4.GridView 的应用实现(以网格显示A,B,C,D,E,F)
1)获得GridView对象(findViewById)
2)构建适配器(ArrayAdapter)
3)关联适配器(setAdapter)

GridView 常用属性

1)列的数量:android:numColumns="2"
2)水平间隙:android:horizontalSpacing="1dp"
3)垂直间隙:android:verticalSpacing="1dp"
4)列的宽度:android:columnWidth="60dp"
5)间隙模式:android:stretchMode="columnWidth"

------------------------------------------------------
Spinner 

1.Spinner 是什么
0)View
1)ViewGroup
2)AdpateView
3)下拉列表

2.Spinner 应用场合

以下拉列表形式显示多个item时,可以考虑使用Spinner.
例如:
1)选择学历
2)选择颜色

3.Spinner 的构成及实现原理
类似ListView,GridView,...

4.Spinner 应用的简单实现
1)获得Spinner对象
2)构建适配器(ArrayAdapter)
3)关联适配器(setAdapter)


其它相关方法
1)setDropDownViewResource(借助此方法设置下拉列表布局)
2)getDropDownView(此方法在显示下拉列表时自动调用)
3)getSelectedItem(借助此方法获得选中的item)
4)....
5.Spinner 相关监听器
1)OnItemSelectedListener
2).......
------------------------------------------------------
ViewPager 

1.ViewPager 是什么
1)View
2)ViewGroup

2.ViewPager 应用场合
以分页形式显示Item时,可以考虑使用此对象。
例如:
1)新手指导页面
2)系统广告条
3)主页面内容左右滑动时的切换

3.ViewPager 对象的构成及实现原理
1)ViewPager (Item:item view+data)
2)PagerAdapter (ViewPager借助此适配器加载数据)

4.ViewPager 的应用及相关实现
1)获得ViewPager对象(android.support.v4.view.ViewPager)
2)构建PagerAdapter对象(抽象类型,重写四个方法)
3)关联适配器对象(setAdapter)

ViewPager对象在显示数据时,会借助PagerAdapter
将数据首先要构建成Item,且在初始化时,默认会借助适配器的instantiateItem这个方法构建两个item,在ViewPager对象滑动时可能还会继续构建新的item,同时也会有一些通过destroyItem方法进行销毁。

		ViewPager vp = (ViewPager) findViewById(R.id.vPagerId);
		PagerAdapter pa = new PagerAdapter() {
			
			@Override
			public boolean isViewFromObject(View arg0, Object arg1) {
				return arg0 == arg1;
			}
			
			@Override
			public int getCount() {
				return 7;
			}
			@Override
			public Object instantiateItem(ViewGroup container, int position) {
				ImageView iv = map.get(position);
				if(iv == null){
					iv = new ImageView(MainActivity.this);
				iv.setImageResource(imgs[position]);
				map.put(position, iv);
					
				}
//				ImageView iv = new ImageView(MainActivity.this);
				container.addView(iv);
				return iv;
				
			
			}
			
			@Override
			public void destroyItem(ViewGroup container, int position, Object object) {
				container.removeView((View)object);
			}
			
		<span style="white-space:pre">	</span>};@Override
<span style="white-space:pre">			</span>public void destroyItem(ViewGroup container, int position, Object object) {
<span style="white-space:pre">				</span>container.removeView((View)object);
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>
<span style="white-space:pre">			</span>};
<span style="white-space:pre">		</span>vp.setAdapter(pa);



PagerAdapter 相关方法说明:
1)getCount():返回ViewPapger最多显示的item的个数
2)isViewFromObject(View arg0,Object arg1):

判定instantiateItem返回的key对应的view是否是容器(ViewPager)中添加的view,此方法如何实现由instantiateItem方法的返回值决定。


3)instantiateItem(ViewGroup container, int position)
构建Item时会执行此方法,此方法用于构建item,
并将构建的item添加到viewPager容器,然后返回
一个与此item对应的一个key
  
4)destroyItem(ViewGroup container, int position, Object object)
销毁item时会执行此方法,此方法中通常要从viewpager
中移除对应key的item,key为参数中的object,它的值与
instantiateItem方法返回的值相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值