Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo obtener la vista de un elemento en listview en android?

¿Es posible obtener una vista de artículo basada en su posición en el adaptador y no en las vistas visibles en el ListView?

Soy consciente de funciones como getChildAt () y getItemIdAtPosition () sin embargo, proporcionan información basada en las vistas visibles dentro de ListView. También soy consciente de que Android recicla las vistas, lo que significa que sólo puedo trabajar con las vistas visibles en el ListView.

  • ¿Existen APIs / Samples / Tutorials oficiales para implementar las nuevas directrices de Material-Diseño?
  • ¿Cómo puedo hacer que una celda en un ListView en Android se expanda y contraiga verticalmente cuando se toca?
  • Cambiar la configuración regional dentro de la propia aplicación
  • Nexus 10 - no visible para adb en Windows 7 o Linux
  • Establecer vista de imagen para mostrar la imagen en tarjeta SD?
  • Diferencia en contexto esto y getContext ()
  • Mi objetivo es tener un identificador universal para cada elemento ya que estoy usando CursorAdapter para no tener que calcular la posición del elemento en relación con los elementos visibles.

  • GetLocationOnScreen () vs getLocationInWindow ()
  • Cambio de locale: ¿Forzar la actividad a recargar recursos?
  • Dónde cambiar la configuración de minSdkVersion en la aplicación PhoneGap
  • ¿Qué es layout_collapseParallaxMultiplier utilizado en CollapsingToolbarLayout?
  • FCM devuelve error: NotRegistered después del primer mensaje
  • Añadir "Ver más" al final de textview después de 3 líneas
  • 5 Solutions collect form web for “¿Cómo obtener la vista de un elemento en listview en android?”

    He aquí cómo logré esto. Dentro de mi clase de adaptador (personalizada):

    @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; if (convertView == null) { LayoutInflater inflater = context.getLayoutInflater(); view = inflater.inflate(textViewResourceId, parent, false); final ViewHolder viewHolder = new ViewHolder(); viewHolder.name = (TextView) view.findViewById(R.id.name); viewHolder.button = (ImageButton) view.findViewById(R.id.button); viewHolder.button.setOnClickListener (new View.OnClickListener() { @Override public void onClick(View view) { int position = (int) viewHolder.button.getTag(); Log.d(TAG, "Position is: " +position); } }); view.setTag(viewHolder); viewHolder.button.setTag(items.get(position)); } else { view = convertView; ((ViewHolder) view.getTag()).button.setTag(items.get(position)); } ViewHolder holder = (ViewHolder) view.getTag(); return view; } 

    Esencialmente el truco es establecer y recuperar el índice de posición a través de los métodos setTag y getTag . La variable items hace referencia a ArrayList contiene mis objetos personalizados (adaptadores).

    Vea también este tutorial para ejemplos en profundidad. Déjame saber si necesitas que aclare algo.

    Que pueda ser útil para usted. Vea abajo el código:

      public static class ViewHolder { public TextView nm; public TextView tnm; public TextView tr; public TextView re; public TextView membercount; public TextView membernm; public TextView email; public TextView phone; public ImageView ii; } class ImageAdapter extends ArrayAdapter<CoordinatorData> { private ArrayList<CoordinatorData> items; public FoodDriveImageLoader imageLoader; public ImageAdapter(Context context, int textViewResourceId,ArrayList<CoordinatorData> items) { super(context, textViewResourceId, items); this.items = items; } public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; ViewHolder holder = null; if (v == null) { try { holder=new ViewHolder(); LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); imageLoader = new FoodDriveImageLoader(FoodDriveModule.this); v = vi.inflate(R.layout.virtual_food_drive_row, null); //System.out.println("layout is null......."); holder.nm = (TextView) v.findViewById(R.id.name); holder.tnm = (TextView) v.findViewById(R.id.teamname); holder.tr = (TextView) v.findViewById(R.id.target); holder.re = (TextView) v.findViewById(R.id.received); holder.membercount = new TextView(FoodDriveModule.this); holder.membernm = new TextView(FoodDriveModule.this); holder.email = new TextView(FoodDriveModule.this); holder.phone = new TextView(FoodDriveModule.this); holder.ii = (ImageView) v.findViewById(R.id.icon); v.setTag(holder); } catch(Exception e) { System.out.println("Excption Caught"+e); } } else { holder=(ViewHolder)v.getTag(); } CoordinatorData co = items.get(position); holder.nm.setText(co.getName()); holder.tnm.setText(co.getTeamName()); holder.tr.setText(co.getTarget()); holder.re.setText(co.getReceived()); holder.ii.setTag(co.getImage()); imageLoader.DisplayImage(co.getImage(), FoodDriveModule.this , holder.ii); if (co != null) { } return v; } } 

    Disfrutar. Gracias.

    Una mejor opción es identificar utilizando los datos devueltos por el CursorAdapter en lugar de vistas visibles. Por ejemplo, si sus datos están en un Array, cada elemento de datos tiene un índice único.

     Listview lv = (ListView) findViewById(R.id.previewlist); final BaseAdapter adapter = new PreviewAdapter(this, name, age); confirm.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub View view = null; String value; for (int i = 0; i < adapter.getCount(); i++) { view = adapter.getView(i, view, lv); Textview et = (TextView) view.findViewById(R.id.passfare); value=et.getText().toString(); Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); } } }); 

    Aquí, su muy corto código descrito, puede reutilizar simple patrón de espectador para aumentar el rendimiento de la lista Escriba debajo del código en su método getview ()

     ViewHolder holder = new ViewHolder(); if (convertView == null) { convertView = layoutInflater.inflate(R.layout.skateparklist, null); holder = new ViewHolder(); holder.headlineView = (TextView) convertView .findViewById(R.id.textView1); holder.DistanceView = (TextView) convertView .findViewById(R.id.textView2); holder.imgview = (NetworkImageView) convertView .findViewById(R.id.imgSkatepark); convertView.setTag(holder); //PLEASE PASS HOLDER AS OBJECT PARAM , CAUSE YOU CAN NOY PASS POSITION IT WILL BE CONFLICT Holder and Integer can not cast //BECAUSE WE NEED TO REUSE CREATED HOLDER } else { holder = (ViewHolder) convertView.getTag(); } // your controls/UI setup holder.DistanceView.setText(strDistance); ...... return convertview 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.