1

myadapter.javaには、次のコードがあります。

public View getView(int position,View convertView,ViewGroup parent) {
  View view=null;
  if(convertView!=null)view=convertView;else view=newView(context,parent);
  HashMap<String,String> d=new HashMap<String,String>();
  d=data.get(position);
  String _r=d.get("r");
  String out=d.get("out");
  Typeface mf=Typeface.createFromAsset(context.getAssets(),"fonts/mf.ttf");
  TextView txt=(TextView)view.findViewById(R.id.c_n);
  txt.setText(_r);
  txt.setTypeface(mf);
  if(out.equals("yes") && !d.get("sid").equals("-1")) {
    ImageView imag=(ImageView)view.findViewById(R.id.myimage);
    imag.setVisibility(imag.VISIBLE);//This fires sometimes while scroll, while
    //I scroll & where I don't need it.
    //view.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.c_c));
    //^ same as setVisibility.
  }
  ...
  return view;
}

アプリを起動すると、このリストは問題ありません。しかし、スクロールしている間imag.setVisibility(imag.VISIBLE);、listviewがすべてのスクロールイベントを生成するように、必要のない場所で起動することがあります。一部のImageViewが表示されますが、アプリの起動時には表示されませんでした。

これを修正するにはどうすればよいですか?

4

1 に答える 1

1

convertViewこの問題は、既存のビューをリサイクルするために使用される方法によって引き起こされます。

例-リストアダプタに20個のアイテムがありますがListView、画面に表示できるのは5個だけであるとします。これらの5つのリストアイテム「ビュー」は、がスクロールされたconvertViewときにパラメータとして渡されることによって再利用されます。ListView

の可視性を設定すると、ImageViewはに設定されたままになりconvertViewます。言い換えれば、それをに設定する必要があります。INVISIBLEまたはGONE、表示したくない場合は...

ImageView imag=(ImageView)view.findViewById(R.id.myimage);
if (d.get("ms").equals("yes") && !d.get("sid").equals("-1")) {
    imag.setVisibility(View.VISIBLE);
}
else
    imag.setVisibility(View.INVISIBLE); // Or use View.GONE depending on what you need
于 2012-05-31T18:53:35.117 に答える