我正在初始化如下所示的列表视图并设置其自定义适配器
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;
}
}
}
我想查看我的列表View(lvRecords)的第一个视图调用了多少次getView。基本上我想跟踪可见列表项的数量。
有任何帮助吗?谢谢!
答案 0 :(得分:2)
初始化列表并设置适配器后,您可以使用ListView的getLastVisiblePosition()
和getFirstVisiblePosition()
方法查看可见的项目数。
注意:必须在屏幕上绘制ListView才能使这些方法起作用。如果你想在绘制列表之后得到计数,你可以尝试在视图本身上发布一个runnable,如下所示:
lvRecords.post(new Runnable() {
@Override
public void run() {
int itemsShown = lvRecords.getLastVisiblePosition() - lvRecords.getFirstVisiblePosition();
}
});
如果您计划在每次用户滚动时计算项目数,则可以实现滚动侦听器:
lvRecords.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
if(scrollState == SCROLL_STATE_IDLE) {
int noOfItemsVisible = lvRecords.getLastVisiblePosition() - lvRecords.getFirstVisiblePosition();
Log.e("no of items visible", String.valueOf(noOfItemsVisible));
}
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.e("no of items visible", String.valueOf(visibleItemCount));
}
});
每次状态更改(用户滚动,执行拖动或列表停止滚动)时都会调用onScrollStateChanged
方法。
每次列表位置更改时都会调用onScroll
方法,并且在滚动列表时将每秒调用多次,因此您应该避免在此处执行太多操作。
答案 1 :(得分:0)
您已记录该位置,请查看您有多少日志。