android菜瓜笔记之TypedArray和obtainStyledAttributes使用场景

首先看看函数的定义

public final TypedArray obtainStyledAttributes (AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)


TypedArray是一个用于存放恢复obtainStyledAttributes(AttributeSet, int[], int, int)或 obtainAttributes(AttributeSet, int[])  值的一个数组容器,当操作完成以后,一定要调用recycle()方法。用于检索的索引值在这个结构对应的位置给obtainStyledAttributes属性。

        使用这个类的时候,先要在valuse文件夹下创建:atts.xml文件:


                 


在某个布局文件中我们会使用到该自定义的样式



    
    
        
        
            
        
    


上面布局中的

使用了app:header来定义引入另外的布局到这个布局中,其调用方式为如下两步:

第一步我们在onCreateView中inflate第一个xml布局文件

@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		
		View view = inflater.inflate(R.layout.fr_events_grid, null);		
		emptyViewMessage=(TextView)view.findViewById(R.id.fr_events_list_empty_view_message);
		emptyViewTitle=(TextView)view.findViewById(R.id.fr_events_list_empty_view_title);
		emptyViewImage=(ImageView)view.findViewById(R.id.fr_events_list_empty_view_image_view);
		this.adapter = createAdapter();
		
		listView=(ListView)view.findViewById(R.id.ac_suggested_accounts_listview);
		if (this.headerResId != 0)
	    {
	      View localView = LayoutInflater.from(getActivity()).inflate(this.headerResId, null);
	      this.listView.addHeaderView(localView);
	    }
		
		
		
		this.listView.setAdapter(this.adapter);
		
		//showContentView();
		//showEmptyView();
		this.gotInitialEventsSet=true;
		updateUiIfNeeded();
		
		return view;
		
		//return super.onCreateView(inflater, container, savedInstanceState);
	}

第二步,我们利用onInflate来引入我们自定义的视图部分

@Override
	public void onInflate(Activity activity, AttributeSet attrs,
			Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		super.onInflate(activity, attrs, savedInstanceState);
		TypedArray localTypedArray = activity.obtainStyledAttributes(attrs,R.styleable.EventsListFragment );
	    this.headerResId = localTypedArray.getResourceId(0, 0);
	    localTypedArray.recycle();
	    
	}

利用上述的方式我们就可以在视图中正确使用我们自定义的视图了



你可能感兴趣的:(编程)