本帖最后由 wodejiang2009 于 2011-03-15 09:19:49 编辑

解决方案 »

  1.   

    http://topic.csdn.net/u/20110211/18/d1ef88e7-4fb6-4cbd-99e8-944bcfca4b63.html 参考一下这个。
    顺便我来说一下: 把把所有图片ID都放在一个Vector里面,然后点击删除时,就把那个图片ID从Vector中删除,同时让Vector的size减1,然后在gallery对应的adapter里面notifyDataSetChanged()一下子,就实现了。
      

  2.   

    这样写的性能不知道会不会很差,当gallery拖动的时候,每次都要从sdcard中读入图片,最好加一层缓冲。
    而且自然的写法应该是在Gallery的setOnclicklistener中实现点击操作:
    // Set a item click listener, and just Toast the clicked position
            g.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView parent, View v, int position, long id) {
                    Toast.makeText(Gallery1.this, "" + position, Toast.LENGTH_SHORT).show();
                }
            });
    说一下怎么解决楼主的问题,可以在ImageAdapte里加一个public方法delCurrentPic():
    void delCurrentPic() {
    lis.remove(position);
    }
    然后在setOnClickListener的onClick方法中调用m_ImageAdapter.delCurrentPic();
      

  3.   

    我给你一个我写的按钮添加gallery图片的代码:
    数据:
    Vector<Integer> ImageIDs;
    ImageView iv;
    BaseAdapter ba;onCreate()中进行数据初始化:
           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);安钮添加图片方法:
           public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId()){
    case R.id.add_card:
    ImageIDs.add(R.drawable.new_card);
    ba.notifyDataSetChanged();
    break;___________________
    gallery与adapter的绑定:
            Gallery g1=(Gallery) this.findViewById(R.id.Gallery01);
            ba=new BaseAdapter() {
    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return ImageIDs.size();
    }
    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
    }
    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
                CurrentPosition=position;
          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;
    }
    };
    g1.setAdapter(ba); 我觉得删除可能和添加差不太多,主要是图片ID的数组的动态添加和删除,不太好弄吧~
    可能要好好学一下vector向量的操作
      

  4.   

    恩,delCurrentPic方法中不要忘了notifyDataSetChanged()
      

  5.   

    多谢提醒,其实我这样写是想实现:点击图片的时候响应放大和拖到等事件。我再想想办法。我按照你的提示,在ImageAdapte 里面添加了方法。但是会出错。
    void delCurrentPic() {
    lis.remove(curBirmapID);
    }在Gallery的setOnclicklistener中是这样写。
    /* 设定一个itemclickListener事件 */
    g.setOnItemClickListener(new OnItemClickListener()
    {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id)
    {
    curBirmapID = position;
    Toast.makeText(Testgallery.this, String.valueOf(curBirmapID), Toast.LENGTH_SHORT).show();
    } });
      

  6.   


    lis.remove(curBirmapID);出错就是:
    curBirmapID cannot be resolved
      

  7.   


    这样做是可以的。不知道刚才是什么问题,可能是eclipse的bug。我从新加载一下工程就好了。xjanker2谢谢你呀!
      

  8.   

    curBirmapID 这个变量,是不可以在onCreate()等函数中声明的,要放在class 的数据中吧,这样的话就应该不会出这个报错了吧,比如 private int curBirmapID;
      

  9.   

    你这个curBirmapID是不是声明在内部类中了?