解决方案 »

  1.   

    我也遇到过这个问题,具体原因我觉得如下
    你虽然指定了对象和view的绑定关系,即你指定了R.drawable.pic1应该放到R.id.gif所指的View里,但是你并没有说明这个view是怎么展示这个数据的。因为View有多种设置数据的方式。比如imageview其实并不只有一个setImageBitmap方法。
    建议复杂的listitem的话,直接写一个继承自BaseAdapter的类来完成,重写getView方法,来指定你的每个view是怎么使用绑定的数据集的。用viewholder还可以作到优化,具体写法像这样:
    private class PictureAdapter extends BaseAdapter{
        private LayoutInflater mInflater;
        public PictureAdapter(Context context){
        this.mInflater = LayoutInflater.from(context);
        }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ImageView holder;
    if (convertView == null){ 
    int lid = R.layout.map_ontap_grid;;
    holder = new ImageView(MapActivity.this);
    convertView = mInflater.inflate(lid, null);
    holder = (ImageView) convertView.findViewById(R.id.mapgridimage);
    convertView.setTag(holder);
    } else{
    holder = (ImageView) convertView.getTag();
    }
    holder.setImageBitmap(PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap);
    return convertView;
    }
    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return mPicSet.get(index).size();
    }
    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    return PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap;
    }
    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
    }
       
       }
      

  2.   

    holder.setImageBitmap(PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap);
    这个PicInfoList是什么?里面的参数是什么格式的?
      

  3.   

    哦 ,不好意思,我只是简单复制我写过代码的一段过来,其实PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap 这一串只是我要填充到view里的一个bitmap对象而已,你可以选择你需要的图片放进去,getView的第一个参数position表示正在对第position个listItem进行填充,位置为position的地方应该填什么你就填什么
      

  4.   

    谢了,不过打断点发现RecordMood (贴出来的第一段代码)方法都进不去,
    我的Activity如下。都不知道怎么改了。。
    package com.xyyj.sharefeelingsapp.main;import java.util.ArrayList;import com.ant.liao.GifView;
    import com.xyyj.sharefeelingsapp.R;
    import com.xyyj.sharefeelingsapp.main.util.ActivityManage;import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.DisplayMetrics;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.ViewGroup.LayoutParams;
    import android.view.Window;
    import android.view.WindowManager;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.Toast;@SuppressLint("NewApi")
    public class MainActivity extends Activity implements OnClickListener {
    private View view1,view2,view3;//需要滑动的页卡
    private ArrayList<View> viewList ;//页面集合
    private ViewPager viewPager;//页卡容器
    private ImageView imageView;// 动画图片
    private int offset = 0;// 动画图片偏移量
    private int currIndex = 0;// 当前页卡编号
    private int bmpW;// 动画图片宽度
    private GifView gf1;
    private int count=0;
    private ImageView image1;

    @Override
    public void onClick(DialogInterface dialog, int which) { }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 去除标题栏
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    // 取消状态栏,充满全屏
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    /**
     * 添加到容器管理,统一销毁机制
     */
    ActivityManage.getInstance().addActivity(this);

    /**
     * 初始化加载
     */
    initImageView();
    initViewPager();
    }

    public void initImageView() {
    imageView= (ImageView) findViewById(R.id.cursor);
    bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth();// 获取图片宽度
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int screenW = dm.widthPixels;// 获取分辨率宽度
    offset = (screenW / 3 - bmpW) / 2;// 计算偏移量
    Matrix matrix = new Matrix();
    matrix.postTranslate(offset, 0);
    imageView.setImageMatrix(matrix);// 设置动画初始位置
    }

    public void initViewPager() {

    view1 = findViewById(R.layout.recordmood);
    view2 = findViewById(R.layout.sharemood);
    view3 = findViewById(R.layout.countchart);

    LayoutInflater lf = getLayoutInflater().from(this);
    view1 = lf.inflate(R.layout.recordmood, null);
    view2 = lf.inflate(R.layout.sharemood, null);
    view3 = lf.inflate(R.layout.countchart, null);

    viewList = new ArrayList<View>();//将要分页显示的View装入数组中
    viewList.add(view1);
    viewList.add(view2);
    viewList.add(view3);

    viewPager = (ViewPager) findViewById(R.id.viewpaper);
    PagerAdapter pagerAdapter =new PagerAdapter() { @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return viewList.size();
    } @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == arg1;
    }

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

    @Override
    public int getItemPosition(Object object) {
    return super.getItemPosition(object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    container.addView(viewList.get(position));
    /**
     * 这里面可以添加当前布局文件里的按钮点击事件
     */
    return viewList.get(position);
    }
    };
    viewPager.setAdapter(pagerAdapter);
    viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
    }


    /**
     * 记录心情点击事件
     * @param view
     */
    public void recordClick(View view) {

    MyOnClickListener(0, view);

    /* count+=1;
    int bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.logo_qzone).getWidth();// 获取图片宽度
    gf1 = (GifView)findViewById(R.id.gif1);

    gf1.setGifImage(R.drawable.recordclick);
    gf1.setLayoutParams(new LinearLayout.LayoutParams(bmpW, 80));
    if(count>3) {
    count = 1;
    }
    if(count==1){
    image1 = (ImageView) findViewById(R.id.image1);
    image1.setVisibility(View.GONE);
    gf1.showAnimation();
    gf1.setVisibility(View.VISIBLE);
    }else if(count==2){
    gf1.showCover();
    }else if(count==3) {
    gf1.setVisibility(View.GONE);
    image1.setVisibility(View.VISIBLE);
    }*/
    }

    /**
     * 分享心情
     * @param fragment
     */
    public void shareClick(View view) {
    MyOnClickListener(1, view);
    }

    /**
     * 图形统计
     * @param fragment
     */
    public void chartClick(View view) {
    MyOnClickListener(2, view);

    }
    /**
     * 点击事件
     * @param index
     * @param view
     */
    public void MyOnClickListener(int index, View view) {
    /**
     * 设置点击动画效果
     */
    Animation clickAnimation = AnimationUtils.loadAnimation(this,R.anim.bn_zoom);
    view.startAnimation(clickAnimation);
    viewPager.setCurrentItem(index); // 设置点击后,显示选中的fragment
    }

    /**
     * 页面改变时的监听事件。
     * @author ws
     * 
     */
        public class MyOnPageChangeListener implements OnPageChangeListener{ int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
    int two = one * 2;// 页卡1 -> 页卡3 偏移量 public void onPageScrollStateChanged(int arg0) { } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageSelected(int arg0) {
    /*
    Animation animation = null;
    switch (arg0) {
    case 0:
    if (currIndex == 1) {
    animation = new TranslateAnimation(one, 0, 0, 0);
    } else if (currIndex == 2) {
    animation = new TranslateAnimation(two, 0, 0, 0);
    }
    break;
    case 1:
    if (currIndex == 0) {
    animation = new TranslateAnimation(offset, one, 0, 0);
    } else if (currIndex == 2) {
    animation = new TranslateAnimation(two, one, 0, 0);
    }
    break;
    case 2:
    if (currIndex == 0) {
    animation = new TranslateAnimation(offset, two, 0, 0);
    } else if (currIndex == 1) {
    animation = new TranslateAnimation(one, two, 0, 0);
    }
    break;

    }
    */
    Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);
    currIndex = arg0;
    animation.setFillAfter(true);// True:图片停在动画结束位置
    animation.setDuration(300);
    imageView.startAnimation(animation);
    Toast.makeText(MainActivity.this, "您选择了"+ viewPager.getCurrentItem()+"页卡", Toast.LENGTH_SHORT).show();
    } }}
      

  5.   

    我没有在Activity中找到何时会使用RecordMood中的方法啊
      

  6.   

    嗯,。我的代码有问题,我正在重构。我想用的是ViewPager加fragment。现在代码很混乱,就不贴了,等解决了,在贴出解决的代码。
      

  7.   

    convertView.setTag(gifView);这是干什么的?
      

  8.   

    由于修改的内容很多,问题也很多,所以直接放上这个简单的项目。下载地址
    http://download.csdn.net/detail/u010663321/7506607
      

  9.   

    convertView.setTag(gifView);这是干什么的?把得到的view设为convertView的一个附属物,不用每次都调用findViewById,优化listView用的