2011-04-15 5 views
0

BaseAdapter에 다음 getView가 있습니다. 행 0은 창 밖으로 스크롤 한 후, 행 0의 converView 다른 재사용 할 것이라고 BaseAdapter의 converView 이해

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LinearLayout itemLo; 

    if (convertView != null) { 
     itemLo = (LinearLayout) convertView; 
    } else { 
     itemLo = (LinearLayout) LayoutInflater.from(mContext.getApplicationContext()). 
inflate(R.layout.item, parent, false); 
    } 

    View v1 = itemLo.findViewById(R.id.view1); 
    View v2 = itemLo.findViewById(R.id.view2); 

    if (position == 0) { 
     v1.setVisibility(View.GONE); 
     v2.setText("Start"); 
    } else { 
     v1.setText("" + position); 
     v2.setText("" + position); 
    } 

    return convertView; 
} 

는 첫 번째 행은

(행 0), 내가 행 내 걱정은 0에서 V1을 숨기 행. 문제는 행 0의 v1이 행 0의 View.GONE으로 설정 되었기 때문입니다. 다른 행이 행 0에 대한 converView를 다시 사용하면 View.Visible을 v1로 설정해야합니까? 내 테스트는 convertView에서 v1에 대한 가시성을 재설정 할 필요가 없음을 보여줍니다. 그래서 나는 혼란 스럽다. converView는 convertView가 재사용 될 때 각 뷰에 대한 visibility 속성을 보존하지 않습니까?

감사합니다.

답변

0

현재 위치를 사용하는 대신 데이터를 기반으로 조건을 사용해야합니다.

MyClass c = (MyClass) getItem(position); 
.... 
if (c.isVisible()) { 
    v1.setText("" + position); 
    v2.setText("" + position); 
} else { 
    v1.setVisibility(View.GONE); 
    v2.setText("Start"); 
} 
... 

(c.isVisible) 또는 당신이 좋아하는 다른 조건.

converView는 이전에 getView 메소드를 호출 할 때 변경 될 수있는 모든 속성을 설정/재설정해야한다는 것을 의미합니다.

View.Visible을 v1로 설정해야합니까?