listView のパフォーマンスを改善するための推奨される方法の 1 つは、 getView ()メソッドでViewHolderを使用することです。この ViewHolder オブジェクトは通常、setTag()メソッドを使用してビューにアタッチされ、たとえば onClick(View) リスナー メソッドで行内のすべてのビューを取得できるようにします。
あなたの場合、同じ方法を使用できますが、ToggleButton で、行の重要な情報を持つオブジェクトをそれにアタッチします。次に、onCheckedChangedListenerで、押された ToggleButton を受け取り、 getTag() メソッドを使用して、データベースを更新するために必要なすべての情報とともに、以前に保存されたオブジェクトを取得できます。このようなもの:
public View getView(int position, View convertView, ViewGroup parent) {
//Other stuff here
ToggleButton tb = (ToggleButton)row.findViewById(R.id.toggle_button);
//Attach to the toggle button whatever object you need
tb.setTag("Put an object here");
tb.setOnCheckedChangedListener(new OnCheckedChangedListener(){
@Override
public void onCheckedChanged(CompoundButton button, boolean isChecked){
Object relatedData = button.getTag();
//Update the database with the relatedData
}
});
//Other stuff
return row;
}