Текст Grid View исчезает при прокрутке в Android

Я делаю gridview, в котором отображаются изображения с использованием концепции Image Loader из галереи. В элементе представления сетки есть два представления: одно - изображение, а другое - текстовое представление. По умолчанию 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;
}
}

person Balvinder Singh    schedule 30.08.2014    source источник
comment
ты знаешь javabeen как класс pojo в java, я сделал эту работу   -  person Naveen Tamrakar    schedule 30.08.2014
comment
Используйте viewHolder как класс для хранения ваших представлений.   -  person Gunaseelan    schedule 30.08.2014
comment
не могли бы вы опубликовать весь код адаптера?   -  person Haresh Chhelana    schedule 30.08.2014
comment
@Gunaseelan, не могли бы вы объяснить, как использовать держатель представления здесь. Я использовал его, но не помогло, может быть, я делал неправильно. Я думаю, что это единственная причина ViewHolder. Пожалуйста, помогите мне, если можете. Спасибо.   -  person Balvinder Singh    schedule 30.08.2014
comment
@HareshChhelana, хорошо, я публикую это.   -  person Balvinder Singh    schedule 30.08.2014


Ответы (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;
    }
}
person Haresh Chhelana    schedule 30.08.2014
comment
да, я пытаюсь, но click_count не показывает текст (количество). - person Balvinder Singh; 30.08.2014
comment
текст click_count не виден? и, пожалуйста, проверьте, что я отредактировал свой ответ. - person Haresh Chhelana; 30.08.2014
comment
не отображается, если я установил видимость. ВИДИМ, тогда SetTxt () не устанавливает текст в текстовое представление. - person Balvinder Singh; 30.08.2014
comment
он показывает текст, но проблема не отображается на том же месте, на котором я нажимаю. Если я нажму на 1-й элемент, текст будет отображаться на 15-й позиции или может отличаться - person Balvinder Singh; 30.08.2014
comment
приложение разбилось при использовании этого кода. ошибка: java.lang.ClassCastException: android.widget.TextView не может быть преобразован в com.img.rempic.ImageGridActivity$ImageAdapter3$ViewHolder - person Balvinder Singh; 30.08.2014
comment
Сбой теперь устранен, и Click_count показывает значение счетчика, но оно исчезло при прокрутке. - person Balvinder Singh; 30.08.2014