场景:ListView中有4个Item,那么,我问,第一次显示ListView时,getVie方法调用多少次?第二次显示ListVie时,又调用多少次?
有的人说不就4次吗,有的人说这个我不知道,有的人说,这个要看情况的。
确实!要看情况的!
先贴代码:
package com.example.listviewdemo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends Activity { ListView listView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.mylistview); listView.setAdapter(new MyAdapter()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } class MyAdapter extends BaseAdapter{ String[] s = {"A","B","C","D"}; @Override public int getCount() { return 4; } @Override public Object getItem(int position) { return s[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null); // viewgroup, false holder.tv = (TextView)findViewById(R.id.tv); convertView.setTag(holder); Log.i("test","A:"+position+","+holder.hashCode()); } else { holder = (ViewHolder) convertView.getTag(); } Log.i("test","B:"+position+","+holder.hashCode()); return convertView; } class ViewHolder { TextView tv; } } }
布局文件: main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ListView android:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ListView android:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </RelativeLayout>
接下来做不同的修改,看不同的日志输出,很诡异,很让人吃惊得想去喝可乐!
测试一:
1。 如果ListView的layout_width="fill_parent" 并且 layout_height="fill_parent"
日志输出:
08-16 12:16:54.450: I/test(9888): A:0,1090886984 08-16 12:16:54.450: I/test(9888): B:0,1090886984 08-16 12:16:54.450: I/test(9888): A:1,1090890856 08-16 12:16:54.450: I/test(9888): B:1,1090890856 08-16 12:16:54.450: I/test(9888): A:2,1090893840 08-16 12:16:54.450: I/test(9888): B:2,1090893840 08-16 12:16:54.460: I/test(9888): A:3,1090896720 08-16 12:16:54.460: I/test(9888): B:3,1090896720 2. 将ListView的layout_height="fill_parent"<ListView android:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="wrap_content"/>结果:
08-16 12:17:54.410: I/test(9980): A:0,1090888024
08-16 12:17:54.410: I/test(9980): B:0,1090888024
08-16 12:17:54.410: I/test(9980): B:1,1090888024
08-16 12:17:54.410: I/test(9980): B:2,1090888024
08-16 12:17:54.410: I/test(9980): B:3,1090888024
08-16 12:17:54.490: I/test(9980): B:0,1090888024
08-16 12:17:54.490: I/test(9980): A:1,1090894640
08-16 12:17:54.490: I/test(9980): B:1,1090894640
08-16 12:17:54.500: I/test(9980): A:2,1090897624
08-16 12:17:54.500: I/test(9980): B:2,1090897624
08-16 12:17:54.500: I/test(9980): A:3,1090900504
08-16 12:17:54.500: I/test(9980): B:3,1090900504
08-16 12:17:54.530: I/test(9980): A:0,1090913200
08-16 12:17:54.530: I/test(9980): B:0,1090913200
08-16 12:17:54.530: I/test(9980): B:1,1090913200
08-16 12:17:54.530: I/test(9980): B:2,1090913200
08-16 12:17:54.540: I/test(9980): B:3,1090913200
3。 将
未完待续,先把活干完,再总结。