Android的画廊的getView()返回不正确的位置 [英] Android Gallery's getView() returning incorrect position

查看:99
本文介绍了Android的画廊的getView()返回不正确的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

感谢您的阅读!

我采用的是Android画廊既作为的LayoutParams MATCH_PARENT显示一个全屏幕图像的时间。

I am using the Android Gallery with both LayoutParams as MATCH_PARENT to show one full screen image at a time.

下面是我的code:

layout.xml

layout.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <Gallery
        android:id="@+id/gallery" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </Gallery>
    <TextView android:id="@+id/tvShowText" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_alignParentBottom="true" />
</RelativeLayout>

HelloGallery.java

HelloGallery.java


package com.android.sagar;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class HelloGallery extends Activity {

    TextView tvShowText = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tvShowText = (TextView)findViewById(R.id.tvShowText);

        Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setAdapter(new ImageAdapter(this));

        g.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position, long id) {
                Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }

    public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        private Context mContext;

        private Integer[] mImageIds = {
                R.drawable.pic1,
                R.drawable.pic2,
                R.drawable.pic3
        };

        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

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

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(mContext);

            tvShowText.setText("ImageCaption for Image No.: "+position);

            i.setImageResource(mImageIds[position]);
            i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            i.setBackgroundResource(mGalleryItemBackground);

            return i;
        }
    }
}

在图像显示正常,但我打印的标题是关闭的一个或有时会完全不同。 :(

The images show correctly but the caption that I print is off by one or sometimes totally different. :(

我调试,并发现,当我刷一次,getView()被调用多次 - 约2〜3次......他们都是不同的位置,但图像似乎正在一次。 :( 请帮帮忙!

I debugged and found that when I swipe once, the getView() gets called multiple times - around 2 to 3 times...and they are all different positions but the image appears to be moving one at a time. :( Please help!

推荐答案

为了正确的,你需要重写来更新你的标题画廊 OnItemSelectedListener 。 Sujit是在他的评论很正确, getView 被称为为了使(或pre-渲染,或后期渲染在某些情况下),在每一个图像的图库。它不应该被依赖以识别选择了哪个图像。相反,覆盖 OnItemSelectedListener HelloGallery的onCreate()方法:

In order to update your caption correctly you need to override the Gallery's OnItemSelectedListener. Sujit is correct in his comment that getView is called in order to render (or pre-render, or post-render in some cases) each image in the Gallery. It shouldn't be depended on to identify which image is selected. Instead, override OnItemSelectedListener in your HelloGallery onCreate() method:

    g.setOnItemSelectedListener(new OnItemSelectedListener() 
    {
       @Override
       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
       {
          tvShowText.setText("ImageCaption for Image No.: "+position);
       }
       @Override
       public void onNothingSelected(AdapterView<?> arg0) 
       {
          tvShowText.setText("No image selected");
       }
    });            

这篇关于Android的画廊的getView()返回不正确的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆