【发布时间】:2017-11-20 13:12:16
【问题描述】:
我正在初始化如下所示的列表视图并设置其自定义适配器
lvRecords = (ListView) findViewById(R.id.lv_records);
lvRecords.setAdapter(adapterSearchResult);
下面是我的适配器
public class SearchResultListAdapter extends ArrayAdapter implements View.OnClickListener{
private Context context;
private ArrayList<Record> records;
private int numOfPaginatorBtns = 0;
static class HolderView {
public TextView tvBahiNum;
public TextView tvRegNum;
public TextView tvYear;
public Button btnDetails;
public Button btnRegistry;
}
@SuppressWarnings("unchecked")
public SearchResultListAdapter(Context c, ArrayList<Record> records, int numOfPaginatorBtns) {
super(c, R.layout.search_result_item, records);
this.context = c;
this.records = records;
this.numOfPaginatorBtns = numOfPaginatorBtns;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("position", Integer.toString(position));
if (convertView == null) {
Log.e("in" , "convert View");
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.search_result_item, parent, false);
HolderView listItem = new HolderView();
listItem.tvBahiNum = (TextView) convertView.findViewById(R.id.tv_bahi_num);
listItem.tvRegNum = (TextView) convertView.findViewById(R.id.tv_reg_num);
listItem.tvYear = (TextView) convertView.findViewById(R.id.tv_year);
listItem.btnDetails = (Button) convertView.findViewById(R.id.btn_details);
listItem.btnDetails.setOnClickListener(this);
convertView.setTag(listItem);`}`
HolderView listItem = (HolderView) convertView.getTag();
Record rec = records.get(position);
listItem.tvRegNum.setText(rec.regNum);
listItem.tvBahiNum.setText(rec.bahiNum);
listItem.tvYear.setText(rec.year);
return convertView;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_details:
break;
}
}
}
我想检查在我的列表视图 (lvRecords) 的第一个视图中调用了多少次 getView。基本上我想跟踪可见列表项的数量。
有什么帮助吗?谢谢!!
【问题讨论】:
-
在
if (convertView == null)块内,第一次创建视图。此块将仅针对屏幕上最大数量的可见项目运行。因此,在适配器类中声明一个全局变量,并在 if 块中增加它并记录它。一段时间后,该值将变得恒定。好吧,这都是理论,应该可行。告诉我 -
嗯,这会给我列表视图中的项目总数...我想知道可见项目数
-
不,这不会为您提供列表视图中的项目总数。该 if 块将仅针对屏幕上可见的最大项目数执行。先试试看
-
如何在列表视图的第一个视图中跟踪它?
-
getView()为每个项目调用一次。所以对于列表视图的第一个视图,只会调用一次。