java - 使用解析图像从 Gridview 到 ViewPager

标签 java android gridview parse-platform

请帮忙。我正在寻求将 viewpager 应用到 Gridview 的详细 View 。当您使用本地镜像时,有在线教程,但我想使用从 Parse.com 检索的图像,但我遇到了困难。

主要 fragment :

public class GalleryActivity extends Activity {
private GridView gridView;
private GridViewAdapter gridAdapter;
private int columnWidth;

GridViewAdapter urgentTodosAdapter;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.photogallery);

    final ParseQueryAdapter<ParseObject> mainAdapter;

    gridView = (GridView) findViewById(R.id.gridView);

    urgentTodosAdapter = new GridViewAdapter(this);
    gridView.setAdapter(urgentTodosAdapter);

    gridView.setOnScrollListener(new SampleScrollListener(this));


    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            ParseObject todo = urgentTodosAdapter.getItem(position);


           String about = todo.getString("comment");
            ParseFile image = todo.getParseFile("image"); //getParseFile() is a method of ParseObject
            String imageUrl = image.getUrl();


            Intent intent = new Intent("com.package.name.DetailsActivity");

            intent.putExtra("id", position);



            intent.putExtra("about",about);
            intent.putExtra("position",position);

            intent.putExtra("image",imageUrl); //pass along imageUrl
            startActivity(intent);

        }

    });
}

GridViewAdapter:

 public class GridViewAdapter extends ParseQueryAdapter<ParseObject> {

ProgressBar progressBar;

ParseImageView todoImage;

String what;


protected ImageLoader imageLoader;

public GridViewAdapter(Context context) {

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() {
        public ParseQuery create() {


            ParseQuery query = new ParseQuery("WallImageObject");
            // query.whereEqualTo("highPri", true);
            query.orderByDescending("createdAt");
           // query.setLimit(1000);
            return query;
        }
    });
}


public long getItemId(int position) {
    return 0;
}



@Override
public View getItemView(ParseObject object, View v, ViewGroup parent) {

    ViewHolder viewHolder;

    imageLoader = ImageLoader.getInstance();
    imageLoader.init(ImageLoaderConfiguration.createDefault(getContext()));


    if (v == null) {
        v = View.inflate(getContext(), R.layout.photoisgallery, null);
        viewHolder = new ViewHolder();

        viewHolder.image = (ParseImageView) v.findViewById(R.id.image);

        v.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) v.getTag();
    }



    ParseFile imageFile = object.getParseFile("image");
    if (imageFile != null) {


        if (viewHolder.image.getTag() == null ||
                !viewHolder.image.getTag().equals(imageFile.getUrl())) {

            imageLoader.getInstance().displayImage(imageFile.getUrl(), viewHolder.image, new SimpleImageLoadingListener());
            viewHolder.image.setTag(imageFile.getUrl());
        }


    }


    return v;
}


private static class ViewHolder {
    ParseImageView image;
    TextView title;
}

UDAPTED:DetailsActivity:根据位置单击,重新调整同一图像三次。

 public class DetailsActivity extends Activity {

private static Context context;
private ViewPager pager;

public static int position;

private TouchImageView image;

public static String pic;

Intent getPic;






@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pagergallery);


    // get intent from GalleriesFragment - get selected image
     getPic = getIntent();
    // get image
    pic = getPic.getStringExtra("image");
    // get position to open image tapped and display in the pager
    position = getPic.getExtras().getInt("id");

    Log.d("position = ", +position + "");


    pager = (ViewPager) findViewById(R.id.pager);
    SwipeImageAdapter swipeAdapter = new SwipeImageAdapter();
    pager.setAdapter(swipeAdapter);
    pager.setCurrentItem(position);

}



@Override
public void finish() {

    super.finish();
}

private class SwipeImageAdapter extends PagerAdapter {
    private int[] images = new int[] {
            R.drawable.ic_danger,
            R.drawable.ic_4,
            R.drawable.ic_beycd
    };

    @Override
    public int getCount() {
        return images.length;

    //    return GalleryActivity.todo.g


    }

    Object getItem(int position){

        return position;
    }



    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((ImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Context context = DetailsActivity.this;


        ImageView imageView = new ImageView(context);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
       // imageView.setImageResource(images[position]);

        String url = getPic.getStringExtra("image"); //get the url String


        Picasso.with(context).load(url)
                .noFade()
                .into(imageView);


        ((ViewPager) container).addView(imageView, 0);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((ImageView) object);
    }
}

最佳答案

为了实现您想要的行为,您需要向 PagerAdapter 提供要显示的项目列表。您可以通过创建如下所示的构造函数来做到这一点:

public SwipeImageAdapter(Context context, ArrayList<Image> data) {
        this.mContext = context;
        this.mData = data;
    }

然后使用mData将数据填充到您的itemView(instantiateItem方法)

请记住在DetailsActivity中将setCurrentItem设置为您的寻呼机

关于java - 使用解析图像从 Gridview 到 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662618/

相关文章:

android - Xamarin Forms - Android Splashscreen 也显示在主应用程序中

asp.net - 将数字格式设置为右对齐,同时保持货币符号左对齐

java - 在 Java 中加速 2D 图像*而不*干扰 JMenus

java - Spring JMS 监听器容器未完全停止

java - 我是否需要多个类来制作一个只有 1 个用户的扑克程序?

android - 如何获取Share Intent回调结果

android - 有谁知道我是否可以使用 kivy 访问和管理 wifi 连接?

mysql - 将数据绑定(bind)到 GridView

c# - ASP.NET GridView 列删除

java - 迭代 ArrayList 以获得 5 个最大的数字