전에는 그런 것을 본 적이 없지만 지난 며칠 동안 나는 Listview
의 매우 독특한 동작을 경험하고 있으며 지금까지는 문제를 격리 할 수 없었습니다.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 개의 항목이 전체 화면 (또는 그 이상)을 차지합니까? 또는 내용이 화면의 보이는 부분 안에 들어 있는지 여부 – 66CLSjY
화면에서 아무것도 보이지 않고 있습니다. 화면의 보이는 부분은 6 개의 항목으로 채워지고 1 또는 2 개의 항목은 화면의 일부만 차지합니다. – mjosh