ListView con CustomCursorAdapter desplazamiento no es suave
Estoy teniendo un ListView con CustomCursorAdapter. El Listview se desplaza lentamente. Aquí está el código que usé.
public class CustomCursorAdapter extends CursorAdapter { private ViewHolder holder=null; private Activity mContext=null; private ArrayList<Boolean> mCheckedList=null; private Button mCancel=null; private Cursor mCursor = null; private DatabaseHandler mDbHandler; private int dStatus; private LayoutInflater inflater; public CustomCursorAdapter(Activity context) { super(context, cursor); this.mCursor = cursor; this.mContext = context; this.mDbHandler = new DatabaseHandler(context); this.inflater = LayoutInflater.from(context); } @Override public void bindView(View view, Context arg1, Cursor c) { holder=(ViewHolder) view.getTag(); long duration = c.getLong(c.getColumnIndex(DatabaseHandler.DURATION)); holder.checkToSend.setTag(c.getPosition()); holder.editDitn.setTag(c.getPosition()); holder.pendingLayout.setTag(c.getPosition()); holder.name.setText(c.getString(c.getColumnIndex(DatabaseHandler.NAME))); holder.worktype.setText(c.getString(c.getColumnIndex(DatabaseHandler.WORKTYPE))); holder.comment.setText(c.getString(c.getColumnIndex(DatabaseHandler.COMMENT))); int prio = c.getInt(c.getColumnIndex(DatabaseHandler.PRIORITY)); if(prio == 1) holder.priority.setVisibility(View.VISIBLE); else if(prio == 0) holder.priority.setVisibility(View.INVISIBLE); boolean check = mCheckedList.get(c.getPosition()); holder.checkToSend.setChecked(check); onEnableOrDisable(true); int dictStat = c.getInt(c.getColumnIndex(DatabaseHandler.STATUS)); if(c.getInt(c.getColumnIndex(DatabaseHandler.ISACTIVE))==1 || ((dictStat == 2 || dictStat == 3)&&!DMApplication.isEditMode())) holder.checkToSend.setVisibility(View.GONE); else holder.checkToSend.setVisibility(View.VISIBLE); switch (dictStat) { case 1: holder.status.setText(""); if(DMApplication.isOnEditState()&&DMApplication.getTabPos()==1) holder.checkToSend.setVisibility(View.GONE); else holder.checkToSend.setVisibility(View.VISIBLE); onEnableOrDisable(true); break; case 111: holder.status.setTextColor(mContext.getResources().getColor(R.color.status_blue)); onEnableOrDisable(false); holder.status.setText(mContext.getResources().getString(R.string.Property_sending)); break; case 222: holder.status.setTextColor(mContext.getResources().getColor(R.color.status_red)); holder.status.setText(mContext.getResources().getString(R.string.Property_Timeout)); onEnableOrDisable(true); break; case 333: holder.status.setTextColor(mContext.getResources().getColor(R.color.status_blue)); holder.status.setText(mContext.getResources().getString(R.string.Property_Retrying)); onEnableOrDisable(false); break; case 444: holder.status.setTextColor(mContext.getResources().getColor(R.color.status_red)); holder.status.setText(mContext.getResources().getString(R.string.Property_Conversion_Failed)); onEnableOrDisable(true); break; case 555: holder.status.setTextColor(mContext.getResources().getColor(R.color.status_blue)); onEnableOrDisable(false); holder.status.setText(mContext.getResources().getString(R.string.Property_Waiting_Send)); break; case 20: holder.status.setTextColor(mContext.getResources().getColor(R.color.status_red)); holder.status.setText(mContext.getResources().getString(R.string.property_sending_failed)); onEnableOrDisable(true); break; case 3: holder.status.setText(mContext.getResources().getString(R.string.Property_Via_Email)); onEnableOrDisable(true); break; default: holder.status.setText(""); onEnableOrDisable(true); break; } int isflashair = c.getInt(c.getColumnIndex(DatabaseHandler.ISFLASHAIR)); String formattedDur = Utilities.getDurationInTimerFormat(duration); if(isflashair == 0){ holder.imgflash.setVisibility(View.GONE); holder.editDitn.setVisibility(View.VISIBLE); holder.pendingLayout.setClickable(true); if(dictStat == 2 || dictStat == 3){ holder.date.setText(DMApplication.getLocalizedDateAndTime(c.getString(c.getColumnIndex(DatabaseHandler.SENT_DATE)))+" " +formattedDur); }else{ holder.date.setText(DMApplication.getLocalizedDateAndTime(c.getString(c.getColumnIndex(DatabaseHandler.REC_END_DATE)))+" " +formattedDur); } }else{ holder.imgflash.setVisibility(View.VISIBLE); holder.editDitn.setVisibility(View.GONE); holder.pendingLayout.setClickable(false); if(dictStat == 2 || dictStat == 3){ holder.date.setText(DMApplication.getLocalizedDateAndTime(c.getString(c.getColumnIndex(DatabaseHandler.SENT_DATE)))); }else{ holder.date.setText(DMApplication.getLocalizedDateAndTime(c.getString(c.getColumnIndex(DatabaseHandler.REC_END_DATE)))); } } notifyDataSetChanged(); } private void onEnableOrDisable(boolean enable) { if(DMApplication.getTabPos()==1) { if(enable) { holder.checkToSend.setEnabled(true); holder.pendingLayout.setEnabled(true); holder.editDitn.setEnabled(true); } else { holder.checkToSend.setVisibility(View.GONE); holder.checkToSend.setEnabled(false); holder.pendingLayout.setEnabled(false); holder.editDitn.setEnabled(false); } } } @Override public View newView(Context arg0,final Cursor cursor, ViewGroup parent) { View retView = inflater.inflate(R.layout.tab_list_layout, parent, false); holder = new ViewHolder(); holder.name = (TextView) retView.findViewById(R.id.text_tab_list_dictation_name); holder.worktype = (TextView) retView.findViewById(R.id.text_tab_list_worktype); holder.comment = (TextView) retView.findViewById(R.id.text_tab_list_comment); holder.date = (TextView) retView.findViewById(R.id.text_tab_list_dictation_date); holder.status = (TextView) retView.findViewById(R.id.text_tab_list_dictation_status); holder.checkToSend = (CheckBox) retView.findViewById(R.id.chkToSend); holder.priority = (ImageView) retView.findViewById(R.id.img_tab_list_priority); holder.editDitn = (ImageButton) retView.findViewById(R.id.img_tab_list_edit_dictation); holder.imgflash = (ImageView) retView.findViewById(R.id.img_is_flashair); holder.pendingLayout=(RelativeLayout)retView.findViewById(R.id.relativeTabDictateDetails); holder.pendingLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos = (Integer) v.getTag(); Cursor c = (Cursor) getItem(pos); // some code } }); holder.checkToSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos = (Integer) v.getTag(); CheckBox chk = (CheckBox) v; // some code } }); holder.editDitn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos = (Integer) v.getTag(); Cursor c = (Cursor) getItem(pos); // some code } }); retView.setTag(holder); return retView; } static class ViewHolder{ TextView name = null; TextView date = null; TextView worktype = null; TextView comment = null; TextView status = null; CheckBox checkToSend = null; ImageView priority = null; RelativeLayout pendingLayout=null; ImageButton editDitn = null; ImageView imgflash = null; } }
Por favor, hágamelo saber si algo malo en mi código.
- Android - ListView con imágenes se desplaza demasiado lento incluso sin ningún procesamiento en el método getView del adaptador
- Android ListView agrega elementos a la parte superior sin vista de lista desplácese
- Lo que onEndReachedThreshold realmente significa en reaccionar-nativo
- El conjunto de Android View.GONE no libera espacio en listview
- Resaltar el elemento seleccionado en ListView en Android
- Agregar CheckBox a la vista de fila ListView hace que la fila no haga clic
- Diferente posición z para los elementos ListView
- TextViews en la parte superior e inferior, el espacio restante lleno de ListView
- Actualización de Android ListView con SimpleCursorAdapter
- ¿Cómo puedo replicar este patrón de interfaz de usuario: haga clic en el elemento ListView y expanda debajo de él?
- Android ==> ListView quedarse seleccionado?
- Ocultar y mostrar el botón flotante mientras que los rollos de ListView
- ¿Cuál es la diferencia entre BaseAdapter y ArrayAdapter?
Sí se puede utilizar el getView en lugar de newView.as que le proporciona una vista reciclado como una contravista.
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; View retView = convertView; if (convertView == null) { retView = inflater.inflate(R.layout.tab_list_layout, parent, false); holder = new ViewHolder(); holder.name = (TextView) retView.findViewById(R.id.text_tab_list_dictation_name); holder.worktype = (TextView) retView.findViewById(R.id.text_tab_list_worktype); holder.comment = (TextView) retView.findViewById(R.id.text_tab_list_comment); holder.date = (TextView) retView.findViewById(R.id.text_tab_list_dictation_date); holder.status = (TextView) retView.findViewById(R.id.text_tab_list_dictation_status); holder.checkToSend = (CheckBox) retView.findViewById(R.id.chkToSend); holder.priority = (ImageView) retView.findViewById(R.id.img_tab_list_priority); holder.editDitn = (ImageButton) retView.findViewById(R.id.img_tab_list_edit_dictation); holder.imgflash = (ImageView) retView.findViewById(R.id.img_is_flashair); holder.pendingLayout=(RelativeLayout)retView.findViewById(R.id.relativeTabDictateDetails); holder.pendingLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos = (Integer) v.getTag(); Cursor c = (Cursor) getItem(pos); // some code } }); holder.checkToSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos = (Integer) v.getTag(); CheckBox chk = (CheckBox) v; // some code } }); holder.editDitn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos = (Integer) v.getTag(); Cursor c = (Cursor) getItem(pos); // some code } }); retView.setTag(holder); } else { holder = (ViewHolder) retView.getTag(); } return retView ; }
Es mejor que uses getView()
lugar de newView()
ya que te proporciona una vista reciclado ( convertView
), que es la vista que sale de la pantalla cuando se desplaza, por lo que se reduce el tiempo necesario para crear un New Ver utilizando esta vista reciclado y también disminuir las colecciones Garbage necesarias para quitar la vista ( retView
) cada vez que se crea una vista.
- Soporte HDF5 en Android
- AsyncTaskLoader: onLoadFinished no se llama después del cambio de orientación