데이터베이스에서 정보를 가져 오는 사용자 지정된 SimpleCursorAdapter가 있습니다. 한 값이 1이면 ImageView의 배경에 색을 지정하고, 0이면 색을 지정하지 않습니다. ListView가로드 될 때 모든 것이 정확하지만 목록의 항목을 스크롤하면 이미지가 잘못 표시됩니다.CursorAdapter가 자동 업데이트 이미지
============ 그냥로드 ============ 하나의 스크롤 위로 ==== 다운 후
ListView 재활용에 대해 알고 있고, 한 항목이 화면 밖으로 나올 때 리소스가 해제되지만, 화면에 다시 돌아올 때 왜 잘못로드되는지 알 수 없습니다. 색상을 원할 때 단순히 ImageView 색상을 투명하게 설정하는 것이 좋습니다.이 해결 방법은 제대로 작동하는 유일한 방법입니까?
이 내 관련 코드입니다 :
RecipeCursorAdapter.java
public class RecipeCursorAdaptor extends SimpleCursorAdapter {
private final Context mContext;
private final int mLayout;
private final Cursor mCursor;
private final LayoutInflater mLayoutInflater;
public CustomCursorAdaptor(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
this.mLayout = layout;
this.mContext = context;
this.mCursor = c;
this.mLayoutInflater = LayoutInflater.from(mContext);
}
private final class ViewHolder {
TextView txt_title;
TextView txt_time;
TextView txt_difficulty;
ImageView img_color;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (mCursor.moveToPosition(position)) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mLayoutInflater.inflate(mLayout, null);
viewHolder = new ViewHolder();
viewHolder.img_color = (ImageView) convertView.findViewById(R.id.ricettaColore);
viewHolder.txt_title = (TextView) convertView.findViewById(R.id.ricettaTitolo);
viewHolder.txt_time = (TextView) convertView.findViewById(R.id.ricettaTempo);
viewHolder.txt_difficulty = (TextView) convertView.findViewById(R.id.ricettaDifficolta);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
String title = mCursor.getString(1);
String time = mCursor.getString(2);
String difficulty = mCursor.getString(3);
int vegetarian = mCursor.getInt(4);
viewHolder.txt_title.setText(title);
viewHolder.txt_time.setText(time);
viewHolder.txt_difficulty.setText(difficulty);
if(vegetarian == 1)
viewHolder.img_color.setBackgroundColor(0xff669900);
/* Adding these two lines it works properly
else
viewHolder.img_color.setBackgroundColor(0x00000000);
*/
}
return convertView;
}
list_ricette.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:id="@+id/ricettaColore"
android:layout_width="5dip"
android:layout_height="45dip"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:contentDescription="Ricetta vegetariana" />
<TextView
android:id="@+id/ricettaTitolo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_toRightOf="@+id/ricettaColore"
android:scrollHorizontally="false"
android:singleLine="true"
android:text="Titolo Ricetta"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/ricettaDifficolta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/ricettaTitolo"
android:layout_below="@+id/ricettaTitolo"
android:scrollHorizontally="false"
android:singleLine="true"
android:text="Difficoltà"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#A1A1A1" />
<TextView
android:id="@+id/ricettaTempo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/ricettaDifficolta"
android:layout_alignParentRight="true"
android:layout_below="@+id/ricettaTitolo"
android:gravity="right"
android:text="Tempo"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#A1A1A1" />
'ListView 재활용에 대해 알고 있고, 한 항목이 화면에서 벗어 났을 때 리소스가 해제되고'해제되지 않음 ... ** 재사용 ** ... 재사용 된 항목이 1 또는 0이고 새로운 값은 ok보다 1입니다.하지만 재사용 된 항목이 1이고 새 값이 0이면 ... – Selvin
그래서 내가 아는 것은 잘못되었습니다. 정보에 감사드립니다! – Mangusto
fyi :'convertView! = null'이라면'convertView'는 오래되고 보이지 않는 (화면 밖으로) item/view – Selvin