conocimiento Android 500 - View.getTag () View.setTag () el uso

prefacio

En primer lugar tenemos que saber método setTag está haciendo, SDK interpretarse como

Etiquetas

A diferencia de los identificadores, las etiquetas no se utilizan para identificar los puntos de vista. Las etiquetas son esencialmente una pieza adicional de información que puede estar asociada con una vista. Se utilizan más a menudo como una conveniencia para almacenar datos relacionados con puntos de vista en los propios puntos de vista en lugar de ponerlos en una estructura separada. 

Etiqueta de identificación no es la visión designado. vista de etiquetas es que la información adicional asociada con la esencia. A menudo se utilizan para almacenar datos por alguna de vista, este se deposita muy fácilmente sin una estructura separada adicional. 

convertView de TAG

1. Vista expandida para uso LayoutInflater objetos usando Tag

    Antes, en el ListView extendió aplicación BaseAdapter no almacena elementos de la lista , por lo que estamos escribiendo código en getView:

public class BaseAdapterEx extends BaseAdapter{

     /*
     * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) 
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) { 

       ViewHolder holder = null;
       if (convertView == null) { 
          holder = new ViewHolder(); 
          convertView = inflater.inflate(R.layout.vlist2, null);
          holder.img = (ImageView) convertView.findViewById(R.id.img);
          holder.title = (TextView) convertView.findViewById(R.id.title);
          holder.info = (TextView) convertView.findViewById(R.id.info);
          // setTag的妙用
          convertView.setTag(holder);
       } else {
          // setTag的妙用
          holder = (ViewHolder) convertView.getTag();
       } 

       // ToDo 去更新 img, title, info的信息。因为传入的position是列表的ID。
    }
}

        En primer lugar tenemos que saber método setTag está haciendo, que es una etiqueta para el objeto View, la etiqueta puede ser cualquier cosa, estamos aquí para poner a convertirse en un objetivo, porque somos los elementos vlist2.xml abstraídos en una clase ViewHolder , con el setTag, la etiqueta es, después de ViewHolder una propiedad de un objeto se crea una instancia. Luego ViewHolder para la operación del titular de la instancia de objeto, se citará como el mecanismo de Java y ha sobrevivido y cambiar el contenido de convertView, en lugar de cada vez que un nuevo movimiento. Nos acaba de llegar a la reutilización - y espero que me he explicado con claridad. Si hay una explicación más simple, por favor avise.

Esto es lo que usamos en el adaptador, entonces no usamos Tag label qué va a pasar aquí?

Nos imaginamos que si no lo hacemos Tag label, por lo que nuestra memoria caché de objetos y cómo combinar y convertView conseguir un uso razonable eficiencia? Parece que la respuesta no es clara - lo que el uso de etiquetas es un enfoque más sensible.

 

2. La etiqueta no se utiliza para LayoutInflater objetos Vista de expansión.

si (convertView! = null) {

  view = convertView;

  ...

  } Else {

  view = nueva Xxx (...);

  ...

  }

Este es nuestro programa, vemos que aparentemente inútil Tag-- Sí, cuando no hay LayoutInflater se ampliará el uso de la vista, no hay necesidad de usar, aunque también se puede utilizar.

 

3. Etiqueta utilizar la otra vista

Podemos operar en todos los Objetos de visión, sobre la forma de utilizar, para ver cómo piensa el autor, dijo que el siguiente ejemplo una subclase de botón Vista para un uso de la etiqueta.

Unido directamente al código:

public class ButtonTagTestActivity extends Activity implements OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       Button button1 = (Button) findViewById(R.id.button1);
       Button button2 = (Button) findViewById(R.id.button2);
       Button button3 = (Button) findViewById(R.id.button3); 

       button1.setTag(1);
       button2.setTag(2);
       button3.setTag(3); 

       button1.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
       // TODO Auto-generated method stub
       int tag = (Integer) arg0.getTag();
       switch (tag) {
       case 1: {
           Toast.makeText(this, "我是button1", Toast.LENGTH_LONG).show();
           break;
       } 
       case 2: {
           Toast.makeText(this, "我是button2", Toast.LENGTH_LONG).show();
           break;
       } 
       case 3: {
           Toast.makeText(this, "我是button3", Toast.LENGTH_LONG).show();
           break;
       } 
       default: {
           break;
       }

       }
    }
}

código de la página XML no se ha publicado. Este ejemplo es un botón de tres y luego haga clic en la interfaz del usuario hace clic se mostrará el botón. Nuestro programa es una página de monitor mundial, establecido en frente de la etiqueta de escucha para cada botón, y luego cambiar al utilizar getTag quitar la etiqueta para ver lo operativo.

La ventaja de esto es que se puede escuchar a gestionar de forma centralizada y mejorar la legibilidad del código - por supuesto, esta es mi comprensión de sí mismo. 

 

Sin embargo, no se realiza generalmente mediante getId () este método? Esto no está mirando más consciente?

    @Override
    public void onClick(View arg0) {
       // TODO Auto-generated method stub
       int tag = (Integer) arg0.getTag();
       switch (arg0.getId()) {
       case R.id.button1: {
           Toast.makeText(this, "我是button1", Toast.LENGTH_LONG).show();
           break;
       } 
       case R.id.button2: {
           Toast.makeText(this, "我是button2", Toast.LENGTH_LONG).show();
           break;
       } 
       case R.id.button3: {
           Toast.makeText(this, "我是button3", Toast.LENGTH_LONG).show();
           break;
       } 
       default: {
           break;
       }

 

Publicados 112 artículos originales · ganado elogios 3 · Vistas 9705

Supongo que te gusta

Origin blog.csdn.net/yush34/article/details/104944234
Recomendado
Clasificación