2011-02-06 12 views
7

Usando el ejemplo tutorial Hello, World Gridview, estoy intentando hacer que la imagen a pantalla completa al hacer clic en lugar de mostrar la posición de la imagen en la matriz. Como no estoy familiarizado con Android y este es mi primer intento de desarrollo con él, estoy perdido. Estoy familiarizado con Java, sin embargo, y he intentado hacer cosas como esta (que obviamente no funcionan):Haciendo imagen de pantalla completa en la aplicación del tutorial de Android

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

    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ImageAdapter(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      showImage(v, position); 
      Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void showImage(View view, int position) { 
    ImageView imgView = (ImageView) view; 
    imgView.setImageResource(position);  
} 

Pero la aplicación se bloquea (fuerza de cierre). ¿Algunas ideas?

Here is the tutorial app I am using

+0

¿Cuál es el error exacto que obtienes? ¿Qué dice LogCat? – John

+0

Está arrojando un puntero nulo en imgView.setImageResource. Gracias por el consejo sobre Logcat, solo estaba usando el depurador habitual. Al menos ahora puedo ver errores detallados :) view.getId() es -1 por cierto. – Organiccat

Respuesta

23
imgView.setImageResource(position); 

Esto le da un error porque no se está usando correctamente. El parámetro debe apuntar al ID del recurso de la imagen (que es un int), p. R.id.imageid. Incluso si tuviera que proporcionar el ID de recurso correcto, lo que quiere hacer no funcionaría.

Para obtener la ID de recurso correcta, deberá llamar al adaptador de la vista y usar el método getItemId(position) para obtener la ID de recurso correcta. en su ImageAdapter, si cambia su método getItemId() para devolver mThumbsIds[position] en lugar de 0 (como en el ejemplo de Google).

Sin embargo, para lograr su resultado, le sugiero que cree una nueva actividad y solo cargue la imagen de esa manera.

Por ejemplo:

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position); 

     Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); 
     fullScreenIntent.putExtra(thisClassName.class.getName(), imageId); 

     thisClassName.this.startActivity(fullScreenIntent); 
    } 
}); 

Suponiendo que se crea un archivo full_image.xml diseño, que contiene sólo una ImageView con un id de "fullImage", la clase FullScreenImage debería tener este aspecto:

public class FullScreenImage extends Activity 
{ 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.full_image); 
     Intent intent = getIntent(); 
     long imageId = intent.getExtras().get(thisClassName.class.getName()); 
     ImageView imageView = (ImageView) v.findViewById(R.id.fullImage); 

     imageView.setLayoutParams(new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT)); 

     imageView.setImageResource(imageId); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    } 
} 

algo en este las líneas deberían funcionar bien para ti, con algunos ajustes. Asegúrese de agregar FullScreenImage en su archivo AndroidManifest.xml como <activity> también.

+0

Necesitaba algo de edición, pero obtuve la esencia una vez que comencé. Probablemente debería haber empezado con algo un poco más fácil saltando a Android: p – Organiccat

+0

este código está dando clase cast excepción – ekjyot

+0

long imageId = (ImageAdapter) parent.getAdapter.getItemAt (posición); - Esta línea me muestra el desajuste del tipo: no se puede convertir de MainActivity.ImageAdapter a long –

0

Aquí, usted está tomando el ID de la opinión de que era clic (aprobada en el argumento view) y utilizarlo para mirar hacia arriba en sí otra vez:

ImageView imgView = (ImageView) findViewById(view.getId()); 

Eso hace no tiene sentido, especialmente porque la vista clicada aparentemente tiene sin ID, lo que ocasiona que findViewById devuelva null.

es probable que desee pasar el ID de su ImageView lugar:

ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is); 
+0

v es mi ImageView, comprobé dos veces en el depurador y se muestra bien, pero no tiene un mID (que parece ser el id, ya que eso es lo que aparece si pruebo parent.getId(). El ImageView es un objeto dinámico generado dentro del código y es la composición de datos de GridView si eso ayuda. – Organiccat

+0

Me estoy acercando, ahora la imagen se está poniendo en blanco y no estoy obteniendo un error. – Organiccat

+0

Como el imageView es dentro de la vista de cuadrícula, ¿tengo que reemplazar la vista de cuadrícula? – Organiccat

Cuestiones relacionadas