事情是这样的:
        ImageIDs=new Vector <Integer>(5,1);
        ImageIDs.add(R.drawable.demo_0);
        ImageIDs.add(R.drawable.demo_1);
        ImageIDs.add(R.drawable.demo_2);
        ImageIDs.add(R.drawable.demo_3);
        ImageIDs.add(R.drawable.add_card);
——————————Gallery g1=(Gallery) this.findViewById(R.id.Gallery01);
        BaseAdapter ba=new BaseAdapter() {

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

      Log.i("CurrentPosition", Integer.toString(position));
iv=new ImageView(Sample_5_8.this);
iv.setImageResource(ImageIDs.get(position));
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(188, 250));
return iv;
}————————————————————
这样的话,Log.i的输出很让我弄不懂,我把得到的东西写出来:
开始初始化的时候,也就是我还没动这个程序的时候 CurrentPosition 值先后出现 0 、 1
从demo_0 向demo_1 滑动后,CurrentPosition值是2
从demo_1 向demo_2 滑动后,CurrentPosition值是3
从demo_2 向demo_3 滑动后,CurrentPosition值是4
从demo_3 向add_card滑动后,CurrentPosition     没有值, 这是为什么???还有,我再从add_card向回滑动:
从add_card向demo_3 滑动后,CurrentPosition值是2   这是为什么? add_card是第5张图啊??
从demo_3 向demo_2 滑动后,CurrentPosition值是1
从demo_2 向demo_1 滑动后,CurrentPosition值是0
从demo_1向demo_0滑动后, CurrentPosition 又是没有值  ,这是为哈? 这个position是什么个内容?API文档看了不懂,渴望更深切的解释,还有getView() 到底是干什么用?具体讲些请,我现在糊涂了有些

解决方案 »

  1.   

    position是屏幕上显示的照片的位置。比如说你有5张照片,但你的屏幕上并没有同时出现5张照片,此时的position就不在是你以为的position。
      

  2.   

    当一张图片由没有显示到显示过程,就会调用getView来创建它并显示。
      

  3.   

    当一张图片由没有显示到显示的过程中,会调用getView来创建实例,显示图片。
      

  4.   

    “但你的屏幕上并没有同时出现5张照片,此时的position就不在是你以为的position。”这句话什么意思??能不能再详细一些? 我的目的就是想得到现在在屏幕正中间的 图片在 我的图片Id数组中的位置~如果position不行?那么怎么能得到呢??
      

  5.   

    搞定了~~就不能在getView() 中获得position,虽然是不知道为啥position这么离谱~~,在onitemclicked()这个响应函数里找position才是比较好的~
      

  6.   

    position的确是要显示的View在你的adapter里面的位置,否则,你下面的语句
    iv.setImageResource(ImageIDs.get(position));
    就会有问题。你自己心里有一种先入为主的东西,扰乱了你的思维。
    当你在滚动屏幕的时候,并不是说你只滚了一行,就只会有一次调用getView,实际上可能出现多次调用getView的(系统完全有可能多生成几行View,以便在摸动的时候,达到平滑不滞后的效果)。
    总之,position绝对是一个合法的值,但你不要想当然的认为,某次getView,一定会传一个position等于多少值的给你,不一定。因为getView是回调用的,什么时候创建是由系统决定的(它很可能会提早创建,原因前面我说过了)。另外,你的代码效率上有问题:
    比如滚屏造成有一行出了屏,有一行新的入了屏,那么,系统会将出了屏的View做为参数(注意getView的第二个参数)调用getView,期望你将出屏的View改造成入屏的View(这只需要更新一下界面显示即可,不需要再new View,这就是我在前面某一贴里面跟你说的了——优化),你每次都new,是很不负责的。
    当然,上面只优化策略的一种,不排除还有其它策略,这要看google怎么设计的了。
      

  7.   

    在getView里面,你只能创建View,不可有自己的与界面无关的逻辑,因为你不知道getView什么时候被调用,以什么参数被调用。而你要创建View,position参数是必须要使用的,所以不要怀疑这个参数。
      

  8.   

    另外,position绝对不是屏幕上的位置,而是数据在adapter里面的位置,因为你创建View的时候,与它在屏幕上的位置没有关系,你只是创建,至于显示到哪里,你并没有做控制。