2015-01-28 7 views
0

예를 들어 마지막 셀의 높이를 300dp로 지정하고 싶습니다. 내 getView 메소드는 다음과 같습니다.getView의 ArrayAdapter에있는 setLayoutParams는 하나의 뷰에만 params를 설정해야합니다.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    if (rowView == null) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     rowView = inflater.inflate(R.layout.item_card_list, parent, false); 
    } 

    if (position == getCount() - 1) { 
     ViewGroup.LayoutParams layoutParams = rowView.getLayoutParams(); 
     layoutParams.height = 300; 
     rowView.setLayoutParams(layoutParams); 
    } 
    return rowView; 
} 

마지막 셀의 높이를 300dp로 지정합니다. 그것은 잘 작동합니다. 마지막 셀은 300dp 높이를 가지고 있습니다. 그러나 위로 스크롤하면 목록의 다른 많은 요소가 높이 300dp가된다는 사실이 나타납니다.

+0

:보기가 재생되기 때문에 당신이 position == getCount() - 1

을 처리하지 않는 경우 당신은 같이해야 자신의 높이를 복원해야합니다. 정적 번호가 아닙니다. 순서는 계속 변경됩니다. 위치 1은 목록의 사각 지대에있을 수 있으며 2는 1보다 높고 3은 2보다 작습니다. 위치에 대한 보장이 없으며 스크롤 할 때마다 위치가 변경됩니다. –

답변

1

else를 설정해야하기 때문입니다. 위치가 요소의 현재 위치를 제공하기 때문에입니다

if (position == getCount() - 1) { 
     ViewGroup.LayoutParams layoutParams = rowView.getLayoutParams(); 
     layoutParams.height = 300; 
     rowView.setLayoutParams(layoutParams); 
    }else{ 
     viewGroup.LayoutParams layoutParams = rowView.getLayoutParams(); 
     layoutParams.height = ?????; //your other height here.. (WRAP_CONTENT perhaps?) 
     rowView.setLayoutParams(layoutParams); 
    }