1

リストビューを下にスクロールすると、非表示の画像が表示されるという問題があります...この問題はどのように解決されましたか...?? 前もって感謝します... ここに画像の説明を入力 これが私のコードです:- @Override public View getView(final int position, View convertView, ViewGroup parent) {

            View v = convertView;

            if(v==null)
            {
                LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v=li.inflate(R.layout.custom_row,parent,false);

            }

            TextView Title = (TextView) v.findViewById(R.id.custom_text);
            final RelativeLayout content = (RelativeLayout) v.findViewById(R.id.main);
            final ImageView img1 =(ImageView) v.findViewById(R.id.cust_img);

final BinForAll listitem = mList.get(position);


            Title.setText(listitem.getTxt());

            //Desc.setText(listitem.getDesc());
            content.setOnClickListener(new OnClickListener()
            {

                public void onClick(View arg0) 
                {
                    if(img1.getVisibility()==View.VISIBLE && count>=0)
                    {
                        count++;
                        img1.setVisibility(View.GONE);
                        m1.remove(mList.get(position).getTxt());
                        Log.d("remove", mList.get(position).getTxt());
                    }
                    else if(img1.getVisibility()==View.GONE && count>0)
                    {
                        count--;
                        img1.setVisibility(View.VISIBLE);
                        m1.add(mList.get(position).getTxt());
                        Log.d("add", mList.get(position).getTxt());
                    }
                    else
                    {
                        Toast.makeText(getApplicationContext(), "You can not add more than 10 values..", 1).show();
                    }

            }
        });
4

2 に答える 2

1

ListView は常にビューを再利用します。そのため、ListView のビューを を介して準備するたびに、ビューが適切な状態にあることを確認する必要がありますAdapter.getView(final int position, View convertView, ViewGroup parent)

問題を解決するには、final BinForAll listitem = mList.get(position);オブジェクトの可視性状態を保持し (BinForAll クラスに boolean フィールドを追加するだけです)、getView メソッドを次のように書き換えます。

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

        View v = convertView;

        if(v==null)
        {
            LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v=li.inflate(R.layout.custom_row,parent,false);

        }

        TextView Title = (TextView) v.findViewById(R.id.custom_text);
        final RelativeLayout content = (RelativeLayout) v.findViewById(R.id.main);
        final ImageView img1 =(ImageView) v.findViewById(R.id.cust_img);

        final BinForAll listitem = mList.get(position);


        Title.setText(listitem.getTxt());
        // each time set visibility for your image view
        img1.setVisibility(listitem.isVisible() ? View.VISIBLE : View.GONE);

        //Desc.setText(listitem.getDesc());
        content.setOnClickListener(new OnClickListener()
        {

            public void onClick(View arg0) 
            {
                if(img1.getVisibility()==View.VISIBLE && count>=0)
                {
                    count++;
                    img1.setVisibility(View.GONE);
                    // save visibility state
                    listitem.setVisible(false);
                    m1.remove(mList.get(position).getTxt());
                    Log.d("remove", mList.get(position).getTxt());
                }
                else if(img1.getVisibility()==View.GONE && count>0)
                {
                    count--;
                    img1.setVisibility(View.VISIBLE);
                    // save visibility state
                    listitem.setVisible(true);
                    m1.add(mList.get(position).getTxt());
                    Log.d("add", mList.get(position).getTxt());
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "You can not add more than 10 values..", 1).show();
                }

        }
    });
于 2012-10-20T12:56:08.490 に答える