【发布时间】:2013-09-22 20:01:28
【问题描述】:
我以前从未见过类似的情况,但从最近几天开始,我遇到了 Listview 的非常奇怪的行为,直到现在我都无法隔离问题。
我只粘贴我认为必要的代码,稍后我会告诉你我的问题。
/* tell adapter that data is done and stop the more loading progress bar*/
public void setDataChanged(boolean type)
{
isLoadingData = false;
notifyDataSetChanged();
}
/* If loading is going on size of the adapter will increase to show the additional progress bar*/
@Override
public int getCount() {
int size = friendsModels.size();
if (isLoadingData) {
size += 1;
}
Log.i("size", String.valueOf(size));//to check size
return size;
}
/* set loading true and page number of the data items*/
public void setLoadingData(boolean isLoadingData, int page) {
this.isLoadingData = isLoadingData;
this.page = page;
notifyDataSetChanged();
}
/* MAX_ITEM number of item returning from rest webservice per page*/
@Override
public int getItemViewType(int position) {
if(isLoadingData && position%MAX_ITEM==0 && position>0)
{
if(position/MAX_ITEM==page+1)
return 1;
}
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Log.e("getView", "getView");
EventHolder eventHolder;
int type = getItemViewType(position);
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView==null){
eventHolder = new EventHolder();
if(type==0)
{
convertView = li.inflate(R.layout.friends_list_items, parent,false);
eventHolder.name = (TextView)convertView.findViewById(R.id.textview_friend_name);
convertView.setTag(eventHolder);
}
else if(type==1)
{
convertView = li.inflate(R.layout.progress_dialog, parent,false);
eventHolder.progress = (RelativeLayout)convertView.findViewById(R.id.progress_layout);
convertView.setTag(eventHolder);
}
}
else
{
eventHolder = (EventHolder) convertView.getTag();
if(type==0)
{
setFriends(eventHolder, position);
}
}
return convertView;
}
现在onScroll方法-
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem + visibleItemCount >= totalItemCount && !loading && totalItemCount%6==0 && totalItemCount>0 && NetworkUtil.isNetworkAvailable(activity))
{
loading = true;
friendsAdapter.setLoadingData(true,pageNo);
ControllerRequests.getPeople(FragmentClass.this, ++pageNo, search.getText().toString());
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
虽然当有 5 个或更多项目时一切正常,但随着项目大小减小,假设 1 或 2,但有时 getView 方法不会被调用,尽管日志信息显示我 getCount = 1或 2 但 getView 只是不要被调用。没有模式,我的意思是有时 5 次 getView 被调用它工作正常然后突然就不行了,就像那样。
【问题讨论】:
-
如果 getView 没有被调用,那么您不应该在屏幕上看到任何内容。问题:1 或 2 项是否占据整个屏幕(或更多),或者内容是否适合屏幕的可见部分?
-
正是我在屏幕上看不到任何东西,它只是空白。屏幕的可见部分由 6 个项目组成,而 1 或 2 个项目仅占据屏幕的一部分。
标签: android android-listview android-adapter android-scroll