Imagen con captación de Android Viewpager
-
20-12-2019 - |
Pregunta
Soy nuevo en la programación de Android. Tengo una galería con imágenes y, cuando hago clic en una imagen, debe aparecer un votador con imagen y título de pantalla completa y puedo deslizar toda la galería.He seguido este tutorial Ingrese la descripción de enlace aquí La única diferencia es que mis imágenes también se almacenan en una matriz, el título.Cuando ejecuto la aplicación se muestra la galería, pero el viewpager está vacío y no se desliza.No tengo errores, no tengo idea de lo que debería estar equivocado.Gracias de antemano :)
FullScreenImageApTapter.Java
package com.example.sherlockholmes.images;
import android.app.Activity;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.sherlockholmes.R;
public class FullScreenImageAdapter extends PagerAdapter {
private Activity context;
private LayoutInflater inflater;
private int _position;
private Integer[] mThumbIds;
private String[] description;
public FullScreenImageAdapter(Activity context,Integer[] mThumbIds,String[] description){
this.context=context;
this.mThumbIds = mThumbIds;
this.description = description;
}
@Override
public int getCount() {
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,
false);
ImageView imageView = (ImageView) viewLayout.findViewById(R.id.full_image);
TextView textview = (TextView) viewLayout.findViewById(R.id.item_text);
Button btnClose = (Button) viewLayout.findViewById(R.id.btnClose);
imageView.setImageResource(mThumbIds[_position]);
textview.setText(description[_position]);
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.finish();
}
});
((ViewPager) container).addView(viewLayout,0);
return viewLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
}
FullScreenViewActivity.Java
package com.example.sherlockholmes.images;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import com.example.sherlockholmes.R;
public class FullScreenViewActivity extends Activity{
private FullScreenImageAdapter adapter;
private ViewPager viewPager;
private Integer[] mThumbIds = {
R.drawable.acd1, R.drawable.acd1,
R.drawable.acd1, R.drawable.acd1,
R.drawable.acd1, R.drawable.acd1,
R.drawable.acd1, R.drawable.acd1,
};
private String[] description={
"apple","pinaple","rose","strawberry",
"orange","lemon","potato","banana"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen_view);
viewPager = (ViewPager) findViewById(R.id.pager);
Intent i = getIntent();
int position = i.getIntExtra("position", 0);
adapter = new FullScreenImageAdapter(FullScreenViewActivity.this,mThumbIds,description);
viewPager.setAdapter(adapter);
// displaying selected image first
viewPager.setCurrentItem(position);
}
}
Solución
Prueba esto
@Override
public int getCount() {
return mThumbIds.length;
}
en lugar de
@Override
public int getCount() {
return 0;
}
en su FullScreenImageAdapter
y cambia esto
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
con
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
y también cambia esto
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
con
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
actualización: también necesita cambiar esto
imageView.setImageResource(mThumbIds[_position]);
textview.setText(description[_position]);
con
imageView.setImageResource(mThumbIds[position]);
textview.setText(description[position]);
En su FullScreenImageAdapter
.it's BECOZ no ha inicializado _position y es por eso que la vista siempre busca la imagen y la leyenda de la matriz en la posición 0.