Filled on githab: https://github.com/JenyaKirmiza/TestListView
I did on stupid.
Here is a custom adapter:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import org.w3c.dom.Text; import java.util.ArrayList; import java.util.HashMap; import java.util.zip.CheckedInputStream; public class ListAdapter extends BaseAdapter{ ArrayList< Integer> items; private LayoutInflater inflater = null; private ViewHolder viewHolder; private Integer wp; private Context c; public void setSelectedAll() { this.isSelectedAll = !isSelectedAll; } /*--- a simple View Holder class ---*/ static class ViewHolder { public CheckBox checkBox; public TextView textView; } private boolean isSelectedAll=false; /*--- Context and all weapons of specified class are passed here ---*/ public ListAdapter(ArrayList<Integer> items, Context c) { this.items = items; inflater = LayoutInflater.from(c); this.c = c; } @Override public int getCount() { return items.size(); } @Override public Integer getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { /*--- initialize our Weapon Object ---*/ wp = items.get(position); if (convertView == null) { /*--- no View is available. Inflate our list item layout and init the Views we need ---*/ convertView = inflater.inflate(R.layout.list_row, null); viewHolder = new ViewHolder(); viewHolder.checkBox = (CheckBox) convertView .findViewById(R.id.checkBox); viewHolder.textView = (TextView) convertView .findViewById(R.id.textView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (isSelectedAll) viewHolder.checkBox.setChecked(true); else viewHolder.checkBox.setChecked(false); viewHolder.textView.setText(wp+""); return convertView; } }
Here is the activity:
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MyActivity extends Activity { private ListView listView; private ListAdapter listAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); listView=(ListView)findViewById(R.id.listView); ArrayList<Integer> arrayList=new ArrayList<Integer>(); for(int i=0;i<100;i++) arrayList.add(i); listAdapter=new ListAdapter(arrayList, getApplicationContext()); listView.setAdapter(listAdapter); Button btn=(Button)findViewById(R.id.btnSelectAll); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listAdapter.setSelectedAll(); listAdapter.notifyDataSetChanged(); } }); } }
This is so fast. In general, I would do as Gorets advised. The listener hung on the checkbox in getView, and the listener created it in the custom adapter.
Pay attention to the use of the ViewHolder pattern. I also advise you to load all images in a sheet of views in the background.