【问题标题】:Image with caption Android Viewpager带有标题的图像 Android Viewpager
【发布时间】:2014-04-10 23:06:42
【问题描述】:

我是 Android 编程的新手。我有一个带有图像的画廊,当我单击一个图像时,应该会出现一个带有全屏图像和标题的 ViewPager,我可以在整个画廊中滑动。我已遵循本教程enter link description here 唯一的区别是我的图像也存储在一个数组中,即标题。当我运行应用程序时,画廊正在显示,但 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);
    }
}

【问题讨论】:

    标签: java android android-viewpager layout-inflater


    【解决方案1】:

    试试这个

     @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 的数组中获取图像和标题。

    【讨论】:

    • 谢谢 :)。它解决了我的问题,但是我还有另一个问题。无论我在图库中按什么图像,都会出现数组中的第一个图像和第一个文本。所有的 Viewpagers 都是相同的。
    • 非常感谢。我不敢相信我没有看到:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多