صورة مع تسمية توضيحية لـ Android Viewpager
-
20-12-2019 - |
سؤال
أنا جديد في برمجة Android. لدي معرض يحتوي على صور وعندما أنقر على صورة واحدة، يجب أن يظهر ViewPager مع صورة بملء الشاشة وتعليق، ويمكنني التنقل عبر المعرض بأكمله.لقد اتبعت هذا البرنامج التعليمي أدخل وصف الرابط هنا والفرق الوحيد هو أن صوري مخزنة في مصفوفة أيضًا، في التسمية التوضيحية.عندما أقوم بتشغيل التطبيق، يظهر المعرض ولكن صفحة العرض فارغة ولا تنزلق.ليس لدي أي أخطاء، وليس لدي أي فكرة عما ينبغي أن يكون الخطأ.شكرا لك مقدما :)
FullScreenImageAdapter.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);
}
}
المحلول
جرب هذا
@Override
public int getCount() {
return mThumbIds.length;
}
بدلاً من
@Override
public int getCount() {
return 0;
}
في الخاص بك FullScreenImageAdapter
وتغيير هذا
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
مع
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
وأيضا تغيير هذا
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
مع
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
تحديث: كما تحتاج إلى تغيير هذا
imageView.setImageResource(mThumbIds[_position]);
textview.setText(description[_position]);
مع
imageView.setImageResource(mThumbIds[position]);
textview.setText(description[position]);
في الخاص بك FullScreenImageAdapter
.لأنك لم تقم بتهيئة _position ولهذا السبب يجلب جهاز عرض النداء دائمًا الصورة والتسمية التوضيحية من المصفوفة في الموضع 0.