【问题标题】:Grid View text dissapear on scroll in AndroidGrid View 文本在 Android 中滚动时消失
【发布时间】:2014-10-24 02:59:17
【问题描述】:

我正在制作一个网格视图,它使用图库中的 Image Loader 概念显示图像。在网格视图项中有两个视图,一个是 Image,另一个是 textview。默认情况下,textview 是不可见的。我的需要是当我点击 gridview 项目时 textview 应该是可见的,它将显示对特定网格项目的点击次数。但问题是当我点击网格项目然后 Textview 显示点击计数,但是当滚动网格视图时 textview 消失了。这两天一直在坚持这个问题,请帮我解决问题。

这是我的 GetView 方法;

        public class ImageAdapter extends BaseAdapter {
         View view;

         ArrayList<String> mList;
        LayoutInflater mInflater;
        Context mContext;



    public ImageAdapter(Context context, ArrayList<String> imageList) {
        // TODO Auto-generated constructor stub
        mContext = context;
        mInflater = LayoutInflater.from(mContext);

        mList = new ArrayList<String>();

        this.mList = imageList;

    }

    @Override
    public int getCount() {
        return imageUrls.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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


public View getView(final int position, View convertView, ViewGroup parent) {

    view=convertView;           
    LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = vi.inflate(R.layout.row_multiphoto_item, null);

    final ImageView imageView = (ImageView) view.findViewById(R.id.imageView1);
    final TextView click_count=(TextView)view.findViewById(R.id.count);
    imageLoader.displayImage("file://" + imageUrls.get(position), imageView, options, new SimpleImageLoadingListener() {
        @Override
        public void onLoadingComplete(Bitmap loadedImage) {
            Animation anim = AnimationUtils.loadAnimation(ImageGridActivity.this, R.anim.fade_in);
            imageView.setAnimation(anim);
            anim.start();
        }
    });

    // click_count.setVisibility(View.VISIBLE);
    view.setOnClickListener(new OnClickListener() {

        int c=0;

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            image_url.add(imageUrls.get(position));
            count.setText("("+image_url.size()+")");
            c=c+1;
            click_count.setTag(view);
            click_count.setVisibility(View.VISIBLE);
            click_count.setText(String.valueOf(c));
            count.setText("("+image_url.size()+")");
            Toast.makeText(getApplicationContext(), "cuy;;; "+position, 89).show();
        }
    });
//}
    return view;
}
}

【问题讨论】:

  • 你知道javabeen喜欢java中的pojo类吗?我已经完成了这项工作
  • 使用 viewHolder 类来保存你的视图..
  • 能否请您发布整个适配器代码?
  • @Gunaseelan ,你能解释一下如何在这里使用视图支架吗?我已经使用它但没有帮助,可能是我做错了。我认为这是 ViewHolder 的唯一原因。如果可以,请你帮助我。谢谢。
  • @HareshChhelana ,好的,我正在发布它。

标签: android gridview


【解决方案1】:

试试这个方法,希望能帮助你解决问题。

public class ImageAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<HashMap<String,String>> list;
    private Animation anim;

    public ImageAdapter(Context context, ArrayList<String> imageList){
        this.context = context;
        list = new ArrayList<HashMap<String, String>>();
        for (String image : imageList){
            HashMap<String,String> row =  new HashMap<String, String>();
            row.put("image",image);
            row.put("count","0");
            list.add(row);
        }
        anim = AnimationUtils.loadAnimation(context, R.anim.fade_in);
    }

    @Override
    public int getCount(){
        return list.size();
    }

    @Override
    public Object getItem(int position){
        return list.get(position);
    }

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

    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView == null){
            holder =new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.row_multiphoto_item, null);
            holder.imageView = (ImageView)convertView.findViewById(R.id.imageView1);
            holder.click_count = (TextView)convertView.findViewById(R.id.count);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }

        holder.imageView.setAnimation(anim);
        imageLoader.displayImage("file://"+list.get(position).get("image").toString(), holder.imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(Bitmap loadedImage) {
                anim.start();
            }
        });
        holder.click_count.setText(String.valueOf(list.get(position).get("count")));
        if(list.get(position).get("count").equals("0")){
            holder.click_count.setVisibility(View.INVISIBLE);
        }else{
            holder.click_count.setVisibility(View.VISIBLE);
        }
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(position).put("count",String.valueOf(Integer.parseInt(list.get(position).get("count"))+1));
                notifyDataSetChanged();
            }
        });
        return convertView;
    }

    class ViewHolder{
        ImageView imageView;
        TextView click_count;
    }
}

【讨论】:

  • 是的,我尝试了,但是 click_count 没有显示文本(计数)。
  • click_count 文本是否不可见?请检查我是否已编辑我的答案。
  • 不可见,如果我设置了 visibility.VISIBLE 然后 SetTxt() 没有将文本设置为 textview。
  • 它正在显示文本,但在我点击的地方没有显示问题。如果我单击第一项,则文本将显示在第 15 位或可能会有所不同
  • 应用程序在使用此代码时崩溃。错误:java.lang.ClassCastException:android.widget.TextView 无法转换为 com.img.rempic.ImageGridActivity$ImageAdapter3$ViewHolder
猜你喜欢
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2013-07-04
  • 2012-07-17
相关资源
最近更新 更多