سؤال

أنا جديد في برمجة 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top