view.findViewById与findViewById区别?

day_moon 2015-10-24 12:19:58
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.grid_item, null);
ImageView mImageView = (ImageView) view.findViewById(R.id.iv_image);
mImageView.setImageDrawable(images[position]);
return view;
}
问题:1、LayoutInflater inflater = LayoutInflater.from(mContext); 中的mContext为什么是Context的对象而不是this
2、为什么要用view.findViewById,可以直接用.findViewById吗?理由是?
...全文
347 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
day_moon 2015-10-25
  • 打赏
  • 举报
回复
二楼,你回答得很好!谢谢大神!
小林sumc 2015-10-25
  • 打赏
  • 举报
回复
Context本质上是activity或service,而你这个getView是Adapter的方法,getView里面的this指向Adapter,也就是说this这时是个Adapter,而LayoutInflater.from需要的是个Context,你却给它个Adapter,这怎么能行。 第二个问题LayoutInflater可以理解为把布局文件转换为VIew的实例,那么view.findViewById指的是将这个布局文件转换为VIew然后在其中找到id为特定名称的控件。 findViewById是View的方法,你在getView里面直接调用findViewById相当于调用Adapter的findViewById,Adapter根本就没有这个方法。 建议你好好把java基础补一下。问这种问题说明你的面向对象学得一知半解而已!
阿飞__ 2015-10-24
  • 打赏
  • 举报
回复
问题一:首先mContext是指上下文的意思,这个方法你需要传一个上下文进去,this是指当前这个类的对象,你的这个适配器类和上下文是没有继承关系的,在Acticity中可以用this因为Activity继承了Context 问题二:要用view.findViewById是因为这个方法是属于View的,要调用这个方法就必须通过view这个对象来调用,而你的这个适配器类是没有这个方法的,所以不能直接使用

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧