2014-04-28 3 views
1

그래서 저는 textViews 격자를 가지며 228 개의 셀로 구성됩니다. 사용자가 그리드의 셀을 클릭하면 셀의 색이 바뀝니다. 그러나 위 또는 아래로 스크롤하면 다른 셀로 색이 이동합니다. 사용자 정의 그리드 뷰 어댑터를 사용했습니다. 다음은 getView()의 코드입니다.안드로이드 그리드보기에서 셀의 색이 스크롤 할 때 변경됩니다.

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 
    if(convertView == null) { 
     convertView = inflater.inflate(R.layout.fingerprintlayout, null); 
    } 



    TextView tv = (TextView)convertView.findViewById(R.id.textView); 
    tv.setText(gridV[position]); //Setting the text 

    if(position == getClickedCellPosition()){ 
    convertView.setBackgroundColor(Color.BLUE); //Setting the background color 

    } 
    return convertView; 
} 

답변

2

실제로 레이아웃의 다른 셀 값이나 다른 셀로 이동합니까? convertView == null 코드는 뷰를 사용할 수있는 경우 다시 사용합니다. 따라서 셀 1,1의 색상을 설정할 수도 있지만,이 뷰를 스크롤하면 2,1에 다시 사용할 수 있습니다.

이 문제를 확인하는 한 가지 해결책은 null 체크를 제거하고 레이아웃을 다시 부 풀리는 것입니다. 이 같은 코드를 공개하지 마십시오. 비효율적이다.

당신이 할 수있는 일은 강조 표시된 셀의 캐시를 유지하는 것입니다. getView가 호출 될 때, 셀이 나타내는 셀이 선택되어 있지 않으면 배경을 기본값으로 재설정해야합니다. 그렇지 않으면 셀을 강조 표시해야합니다.

관련 문제