0

私は行のクラスを持っています、それはそれRelativeLayout自身にいくつかのレイアウトを拡張して膨らませます。CheckBoxチェック状態リスナーも設定されます。

public class LayersListRow extends RelativeLayout {         

  public LayersListRow (Context context, final GITuple tuple) {
    super(context);
    LayoutInflater.from(context).inflate(R.layout.layers_list_item, this, true);
        ...

    CheckBox checkbox = (CheckBox)findViewById(R.id.layers_list_item_switch);

    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
        ...
        }
    });
  }
    ...
}

ArrayAdapterこのクラスのいくつかのオブジェクトで満たされたカスタムがあります。ビューとしても使いたいです。

public class LayersAdapter extends ArrayAdapter<LayersListRow> {

    @Override
    public View getView (int position, View convertView, ViewGroup parent) {
        return getItem(position);
    }

    public LayersAdapter (Context context, int resource, int textViewResourceId) {
        super(context, resource, textViewResourceId);
    }
}

しかし、このアダプターを自分のリスナーに設定すると、ListViewリスナーCheckBoxが機能しません。ただし、下にスクロールして表示されるアイテムについては、正常に機能します。

メソッドを次return getItem(position);のように置き換えるとgetView

if (null == convertView)
  return getItem(position);

return convertedView;

次に、リストリスナーに最初に表示されるすべてのアイテムがうまく機能しますが、スクロールしようとすると、間違ったアイテム(最初のアイテム)が表示され、ListViewフリーズして応答しません。

なぜこれが発生し、どのように正しく機能させる必要がありますか?

4

1 に答える 1

0

これを使うとき

if (null == convertView)
  return getItem(position);

return convertedView;

ビューは再利用されます。したがって、ビューをスクロールすると、最初に表示された場所が再び表示されます。

私がこの投稿に書いた答えをご覧になることをお勧めします。フォローできない場合は、ここにコメントを記入してください。

ListViewからチェック済みのListitemsを取得し、それを別のアクティビティに渡します

于 2012-12-28T15:28:08.013 に答える