Hello. Fill the ListView from the adapter. By condition, I change the Layout of the list. When scrolling the list, the emails are mixed up, I can not figure out how to win it.
Adapter code:
public class OrderAdapter extends CursorAdapter { private LayoutInflater inflater; private class ViewHolder { TextView name; } public OrderAdapter(Context context, Cursor c, int flags) { super(context, c, flags); this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder holder = (ViewHolder) view.getTag(); holder.name.setText(cursor.getString(cursor.getColumnIndex("mitm_Name"))); //holder.time.setText(cursor.getString(holder.timeIndex)); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ViewHolder holder = new ViewHolder(); View v = null; if (cursor.getInt(cursor.getColumnIndex("State")) == 0) { v = inflater.inflate(R.layout.cellordername, parent, false); holder.name = (TextView) v.findViewById(R.id.txtmitmname); } else { v = inflater.inflate(R.layout.cellorder, parent, false); holder.name = (TextView) v.findViewById(R.id.txtmitmname); } v.setTag(holder); return v; } } Rewrote adapter:
public Cursor getOrderData() { SQLiteDatabase database = dbHelper.getWritableDatabase(); String buildSQL = "SELECT * FROM elf_Orders ORDER BY _id"; return database.rawQuery(buildSQL, null); } public class OrderAdapter extends CursorAdapter { private LayoutInflater inflater; private class ViewHolder { TextView name; } public OrderAdapter(Context context, Cursor c, int flags) { super(context, c, flags); this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public void bindView(View view, Context context, Cursor cursor) { } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ViewHolder holder = new ViewHolder(); if (cursor.getInt(cursor.getColumnIndex("State")) == 0) { View v = inflater.inflate(R.layout.cellordername, parent, false); holder.name = (TextView) v.findViewById(R.id.txtmitmname); v.setTag(holder); holder.name.setText(cursor.getString(cursor.getColumnIndex("mitm_Name"))); return v; } else { View v = inflater.inflate(R.layout.cellorder, parent, false); holder.name = (TextView) v.findViewById(R.id.txtmitmname); v.setTag(holder); holder.name.setText(cursor.getString(cursor.getColumnIndex("mitm_Name"))); return v; } } } Now the markup is assigned correctly, but the data is displayed in a chaotic order when scrolling. In which direction to dig?
newView(...)method is designed to create aViewobject, but not to bind data to thisView. Data binding to a specificViewis handled by thebindView(...)method. Accordingly, you need to transfer all of yoursetText(...)fromnewView(...)tobindView(...). This is at least. - post_zeew