layoutinflatersetTag的作用是什么?

layoutinflater  时间:2021-06-26  阅读:()

安卓自定义actionbar,怎么设置监听事件,急急急

用CustomView。

layout: 部分代码: View customView = LayoutInflater.from(this).inflate(R.layout.back, new LinearLayout(this), false); getActionBar().setDisplayShowCustomEnabled(true); getActionBar().setCustomView(customView); customView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "....", 10000).show(); } }); 我自己测试过,暂无出现问题。

layoutinflater.inflate 和 view.inflate 的区别

平时ListView加载item中,adapter的getView方法中,我们经常用到: LayoutInflater.from(mContext).inflate(R.layout.it,parent,false); 这样的方法来加载布局xml,平时一直就是这么用的,也没什么疑问。

今天网上看了个自定义布局的源码,自定义布局中加载布局xml用的View.inflate方法: public class SettingItemView extends RelativeLayout { private CheckBox cb_status; private _description; private _title; private String desc_on; private String desc_off; private void iniView(Context context) { View.inflate(context, R.layout.setting_item_view, this);//第三个参数传布局文件的父类 cb_status=(CheckBox) this.findViewById(R.id.cb_status); tv_description=(TextView) this.findViewById(_description); tv_title=(TextView) this.findViewById(_title); } 第一次见用这种方式来加载布局的,看了下他的iew加载item,也是用这种方式: @Override public View getView(final int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if(convertView==null){ view=View.inflate(getApplicationContext(), R.layout.list_item_callsms, null);//最后一个传了null holder=new ViewHolder(); _number=(TextView) view.findViewById(_black_number); _mode=(TextView) view.findViewById(_black_mode); holder.iv_delete=(ImageView) view.findViewById(R.id.iv_delete); view.setTag(holder); 好吧,看一下View.inflate的说明: Open Declaration View android.view.View.inflate(Context context, int resource, ViewGroup root) Inflate a view from an XML resource. This convenience method wraps the LayoutInflater class, which provides a full range of options for view inflation. Parameters: context The Context object for your activity or application. resource The resource ID to inflate root A view group that will be the parent. Used to properly inflate the layout_* parameters. See Also: LayoutInflater 最后有一句让你看LayoutInflater这个类,怀疑它内部也是用LayoutInflater实现的,进入源码: public static View inflate(Context context, int resource, ViewGroup root) { LayoutInflater factory = LayoutInflater.from(context); return factory.inflate(resource, root); } 果然内部也是用LayoutInflater实现的,不知道为啥android还要用View.inflat封装一下。





o(〃’▽’〃)o 其中LayoutInflater的Inflate的三个参数意思为: 对于Inflate的三个参数(int resource, ViewGroup root, boolean attachToRoot) 如果inflate(layoutId, null )则layoutId的最外层的控件的宽高是没有效果的 如果inflate(layoutId, root, false ) 则认为和上面效果是一样的 如果inflate(layoutId, root, true ) 则认为这样的话layoutId的最外层控件的宽高才能正常显示 对这三个参数区别不理解的话可以看这篇文章: inflate第三个参数意思 从源码角度解析的有郭大神的: Android LayoutInflater原理分析,带你一步步深入了解View(一) 以及另一篇感觉很不错的: Android LayoutInflate深度解析 给你带来全新的认识 看完,你应该知道这个参数意思了,ok,再来看上面代码, 这时就可以替换为layoutInflater的方式了: 对于第一个自定义布局: //View.inflate(context, R.layout.setting_item_view, this);//第三个参数传布局文件的父类 LayoutInflater.from(context).inflate(R.layout.setting_item_view, this, true);//等价于上面 第二个适配器中getView: //view=View.inflate(getApplicationContext(), R.layout.list_item_callsms, null); view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item_callsms,parent,false);

android LayoutInflater 获取不到控件

这个是获取不到的,因为这个iew没有实际被调用。

但是编译时R文件中确实有这个iew的id值,所以编译什么的都不会报错。

如果你需要获取其中的值,就在Intent中绑定数据。

或者更改它显示内容的话,就在MainActivity中动态注册个广播接收器,从现在这个广播接收器接受广播,并改变TextView的显示内容。

如何判断infowindow当前是打开还是关闭状态

您好,很高兴为您解答,我是用的如下方法: View view=LayoutInflater.from(this).inflate(R.layout.alter_view,null); mInfoWindow = new InfoWindow(view, llInfo, listener); 如果我的回答没能帮助您,请继续追问。

转载,仅供参考。

小白求助:在ViewSwitcher中的setfactroy和其中的makeview方法有什么作用,还有factory是什么?

ViewSwitcher 代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitcher 支持指定动画效果. 为了给ViewSwitcher 添加多个组件, 一般通过ViewSwitcher 的setFactory 方法为止设置ViewFactory ,并由ViewFactory为之创建View 即可. 下面通过一个实例来介绍 ViewFactory的用法.(仿Android系统Launcher 界面 实现分屏 左右滑动效果) import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.ViewSwitcher; import android.widget.ViewSwitcher.ViewFactory; public class ViewSwitcherTest extends Activity { // 定义一个常量,用于显示每屏显示的应用程序数 public static final int NUMBER_PER_SCREEN = 12; // 代表应用程序的内部类, public static class DataItem { // 应用程序名称 public String dataName; // 应用程序图标 public Drawable drawable; } // 保存系统所有应用程序的List集合 private ArrayList items = new ArrayList(); // 记录当前正在显示第几屏的程序 private int screenNo = -1; // 保存程序所占的总屏数 private int screenCount; ViewSwitcher switcher; // 创建LayoutInflater对象 LayoutInflater inflater; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); inflater = LayoutInflater.from(ViewSwitcherTest.this); // 创建一个包含40个元素的List集合,用于模拟包含40个应用程序 for (int i = 0; i < 40; i++) { String label = "" + i; Drawable drawable = getResources().getDrawable( R.drawable.ic_launcher); DataItem item = new DataItem(); item.dataName = label; item.drawable = drawable; items.add(item); } // 计算应用程序所占的总屏数。

// 如果应用程序的数量能整除NUMBER_PER_SCREEN,除法的结果就是总屏数。

// 如果不能整除,总屏数应该是除法的结果再加1。

screenCount = items.size() % NUMBER_PER_SCREEN == 0 ? items.size()/ NUMBER_PER_SCREEN : items.size() / NUMBER_PER_SCREEN + 1; switcher = (ViewSwitcher) findViewById(R.id.viewSwitcher); switcher.setFactory(new ViewFactory() { // 实际上就是返回一个GridView组件 @Override public View makeView() { // 加载iew组件,实际上就是一个GridView组件。

return inflater.inflate(iew, null); } }); // 页面加载时先显示第一屏。

next(null); } public void next(View v) { if (screenNo < screenCount - 1) { screenNo++; // 为ViewSwitcher的组件显示过程设置动画 switcher.setInAnimation(this, R.anim.slide_in_right); // 为ViewSwitcher的组件隐藏过程设置动画 switcher.setOutAnimation(this, R.anim.slide_out_left); // 控制下一屏将要显示的GridView对应的 Adapter ((GridView) switcher.getNextView()).setAdapter(adapter); // 点击右边按钮,显示下一屏,也可通过手势检测实现显示下一屏. switcher.showNext(); } } public void prev(View v) { if (screenNo > 0) { screenNo--; // 为ViewSwitcher的组件显示过程设置动画 switcher.setInAnimation(this, android.R.anim.slide_in_left); // 为ViewSwitcher的组件隐藏过程设置动画 switcher.setOutAnimation(this, android.R.anim.slide_out_right); // 控制下一屏将要显示的GridView对应的 Adapter ((GridView) switcher.getNextView()).setAdapter(adapter); // 点击左边按钮,显示上一屏,也可通过手势检测实现显示上一屏. switcher.showPrevious(); } } // 该BaseAdapter负责为每屏显示的GridView提供列表项 private BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { // 如果已经到了最后一屏,且应用程序的数量不能整除NUMBER_PER_SCREEN if (screenNo == screenCount - 1 && items.size() % NUMBER_PER_SCREEN != 0) { // 最后一屏显示的程序数为应用程序的数量对NUMBER_PER_SCREEN求余 return items.size() % NUMBER_PER_SCREEN; } // 否则每屏显示的程序数量为NUMBER_PER_SCREEN return NUMBER_PER_SCREEN; } @Override public DataItem getItem(int position) { // 根据screenNo计算第position个列表项的数据 return items.get(screenNo * NUMBER_PER_SCREEN + position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position , View convertView, ViewGroup parent) { View view = convertView; if (convertView == null) { // 加载R.layout.labelicon布局文件 view = inflater.inflate(R.layout.labelicon, null); } // 获取R.layout.labelicon布局文件中的ImageView组件,并为之设置图标 ImageView imageView = (ImageView) view.findViewById(R.id.imageview); imageView.setImageDrawable(getItem(position).drawable); // 获取R.layout.labelicon布局文件中的TextView组件,并为之设置文本 TextView textView = (TextView) view.findViewById(iew); textView.setText(getItem(position).dataName); return view; } }; }

setTag的作用是什么?

这个东西在一些需要用到Adapter自定控件显示方式的时候非常有用Adapter 有个getView方法,可以使用setTag把查找的view缓存起来方便多次重用public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mWidgetsSwitchApp .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.app_gallery_item, null); vh = new ViewHolder(); vh.view1 = (ImageView) convertView.findViewById(R.id.view1); vh.view2 = (ImageView) convertView.findViewById(R.id.view2); vh.view3= (ImageView) convertView.findViewById(R.id.view3); vh.view4 = (ImageView) convertView.findViewById(R.id.view4); convertView.setTag(vh); } else { vh = (ViewHolder) convertView.getTag(); }//其他的代码可以直接使用 vh.view1、vh.view2、vh.view3 、vh.view4}

新网,域名7月盛夏1核心2G内存.COM域名仅19.9元/首年,主机9.9元/月,企业邮箱0元体验

新网好不好?新网域名便宜吗?新网怎么样?新网是国内老牌知名域名注册商,企业正规化运营,资质齐全,与阿里云万网和腾讯云DNSPOD同为国内服务商巨头。近日新网发布了最新的七月放价季优惠活动,主要针对域名、云主机、企业邮箱、SSL证书等多款云产品推送了超值的优惠,其中.com顶级域名仅19.9元/首年,.cn域名仅16元/首年,云主机1核心2G内存3Mbps带宽仅9.9元/月,企业邮箱更是免费送1年,...

宝塔面板企业版和专业版618年中活动 永久授权仅1888元+

我们一般的站长或者企业服务器配置WEB环境会用到免费版本的宝塔面板。但是如果我们需要较多的付费插件扩展,或者是有需要企业功能应用的,短期来说我们可能选择按件按月付费的比较好,但是如果我们长期使用的话,有些网友认为选择宝塔面板企业版或者专业版是比较划算的。这样在年中大促618的时候,我们也可以看到宝塔面板也有发布促销活动。企业版年付899元,专业版永久授权1888元起步。对于有需要的网友来说,还是值...

Vultr VPS韩国首尔机房速度和综合性能参数测试

Vultr 商家有新增韩国首尔机房,这个是继日本、新加坡之后的第三个亚洲机房。不过可以大概率知道肯定不是直连中国机房的,因为早期的日本机房有过直连后来取消的。今天准备体验看看VULTR VPS主机商的韩国首尔机房的云服务器的速度和性能。1、全球节点PING速度测试这里先通过PING测试工具看看全球几十个节点的PING速度。看到好像移动速度还不错。2、路由去程测试测试看看VULTR韩国首尔机房的节点...

layoutinflater为你推荐
离线包百度地图离线包如何下载?素数算法判断一个数是否为素数的算法暴力破解rar对RAR压缩包进行解压时需要密码,使用暴力破解仍无法解码该怎么办?gas是什么意思GC什么意思方正证券官方网方正证券完美版下载za是哪个国家的ci是在哪个国家产生的?哪个国家开始流行的acceptchangeswinform 怎样把DataTable 中的值插入到数据库中btest请教SpringSide到底是做什么用的如何查看qq特别关心我的人手机qq怎么看有多少个人把自己设置为特别关心camel是什么意思Camel骆驼究竟是哪个国家品牌?
猫咪av永久最新域名 中国万网虚拟主机 域名交易网 新秒杀 directspace 狗爹 inmotionhosting 日本空间 国内php空间 一元域名 hnyd 骨干网络 ftp教程 最好的免费空间 稳定免费空间 能外链的相册 怎么建立邮箱 重庆电信服务器托管 阿里云免费邮箱 主机管理系统 更多