当前位置: 代码迷 >> Android >> 小弟我的getView初始化被调用了两次
  详细解决方案

小弟我的getView初始化被调用了两次

热度:70   发布时间:2016-05-01 13:19:45.0
我的getView初始化被调用了两次,
打印log

07-14 10:35:26.287: D/MainCityAdapter(3386): getView 0 null
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 1 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 2 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 3 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 4 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 5 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 6 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 7 [email protected]
07-14 10:35:26.297: D/MainCityAdapter(3386): getView 8 [email protected]
07-14 10:35:26.307: D/MainCityAdapter(3386): getView 0 [email protected]
07-14 10:35:26.307: D/MainCityAdapter(3386): getView 1 null
07-14 10:35:26.307: D/MainCityAdapter(3386): getView 2 null
07-14 10:35:26.307: D/MainCityAdapter(3386): getView 3 null
07-14 10:35:26.307: D/MainCityAdapter(3386): getView 4 null
07-14 10:35:26.317: D/MainCityAdapter(3386): getView 5 null
07-14 10:35:26.317: D/MainCityAdapter(3386): getView 6 null
07-14 10:35:26.317: D/MainCityAdapter(3386): getView 7 null
07-14 10:35:26.317: D/MainCityAdapter(3386): getView 8 null


我的getView代码
public View getView(final int position, View convertView, ViewGroup parent)
{
Log.d(TAG, "getView " + position + " " + convertView);

ViewHolder holder = null;

if (convertView == null)
{
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, null);
holder.cityName = (TextView) convertView.findViewById(R.id.text_website_name);

convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
return convertView;


------解决方案--------------------
Adapter是一种智能的实现方式,他可以重用已有的资源,通过适当的重绘来节约资源和提高系统的响应。当getView()被调用两次,不一定是程序的问题,在大多数的情况下,可能是Android触发了页面重绘的需求而发生的,所以不一定是Bug。例如ListView的数据量比较少,但是又有带ProgressDialog分页显示的代码实现,这个时候当第一页不足以满屏显示时,就触发了第二次的重绘要求。