Skip to content

Commit

Permalink
Fixed nasty bug (see issue #5 on github), added 'long list' sample
Browse files Browse the repository at this point in the history
  • Loading branch information
ManuelPeinado committed May 19, 2013
1 parent 0ed4906 commit 5b7710f
Show file tree
Hide file tree
Showing 7 changed files with 437 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
Expand All @@ -44,6 +45,7 @@
import com.manuelpeinado.multichoicelistadapter.R;

class MultiChoiceAdapterHelper implements OnItemLongClickListener, OnItemClickListener, OnCheckedChangeListener {
protected static final String TAG = MultiChoiceAdapterHelper.class.getSimpleName();
private static final String BUNDLE_KEY = "mca__selection";
private Set<Long> checkedItems = new HashSet<Long>();
private AdapterView<? super MultiChoiceBaseAdapter> adapterView;
Expand All @@ -55,6 +57,7 @@ class MultiChoiceAdapterHelper implements OnItemLongClickListener, OnItemClickLi
* Defines what happens when an item is clicked and the action mode was already active
*/
private ItemClickInActionModePolicy itemClickInActionModePolicy = null;
private boolean ignoreCheckedListener;

MultiChoiceAdapterHelper(BaseAdapter owner) {
this.owner = owner;
Expand Down Expand Up @@ -226,7 +229,7 @@ public boolean onItemLongClick(AdapterView<?> adapterView, View view, int positi
}

private int correctPositionAccountingForHeader(AdapterView<?> adapterView, int position) {
ListView listView = (adapterView instanceof ListView) ? (ListView)adapterView : null;
ListView listView = (adapterView instanceof ListView) ? (ListView) adapterView : null;
int headersCount = listView == null ? 0 : listView.getHeaderViewsCount();
if (headersCount > 0) {
position -= listView.getHeaderViewsCount();
Expand Down Expand Up @@ -271,7 +274,9 @@ View getView(int position, View viewWithoutSelection) {
if (viewWithoutSelection instanceof Checkable) {
long handle = positionToSelectionHandle(position);
boolean selected = isChecked(handle);
ignoreCheckedListener = true;
((Checkable) viewWithoutSelection).setChecked(selected);
ignoreCheckedListener = false;
}
if (itemIncludesCheckBox(viewWithoutSelection)) {
initItemCheckbox(position, (ViewGroup) viewWithoutSelection);
Expand All @@ -293,14 +298,17 @@ private boolean itemIncludesCheckBox(View v) {

private void initItemCheckbox(int position, ViewGroup view) {
CheckBox checkBox = (CheckBox) view.findViewById(android.R.id.checkbox);
boolean selected = isChecked(position);
boolean checked = isChecked(position);
checkBox.setChecked(checked);
checkBox.setTag(position);
checkBox.setChecked(selected);
checkBox.setOnCheckedChangeListener(this);
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (ignoreCheckedListener) {
return;
}
int position = (Integer) buttonView.getTag();
setItemChecked(position, isChecked);
}
Expand Down
3 changes: 3 additions & 0 deletions sample/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@
<activity
android:name=".headersample.HeaderActivity"
android:label="@string/activity_title_header" />
<activity
android:name=".manyitemssample.ManyItemsActivity"
android:label="@string/activity_title_many_items" />
<provider
android:name="com.manuelpeinado.multichoiceadapter.demo.simplecursoradaptersample.BuildingsContentProvider"
android:authorities="com.manuelpeinado.multichoiceadapter.demo"
Expand Down
196 changes: 196 additions & 0 deletions sample/res/raw/countries
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
Afghanistan
Albania
Algeria
Andorra
Angola
Antigua & Deps
Argentina
Armenia
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bhutan
Bolivia
Bosnia Herzegovina
Botswana
Brazil
Brunei
Bulgaria
Burkina
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Central African Rep
Chad
Chile
China
Colombia
Comoros
Congo
Congo {Democratic Rep}
Costa Rica
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
East Timor
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Fiji
Finland
France
Gabon
Gambia
Georgia
Germany
Ghana
Greece
Grenada
Guatemala
Guinea
Guinea-Bissau
Guyana
Haiti
Honduras
Hungary
Iceland
India
Indonesia
Iran
Iraq
Ireland {Republic}
Israel
Italy
Ivory Coast
Jamaica
Japan
Jordan
Kazakhstan
Kenya
Kiribati
Korea North
Korea South
Kosovo
Kuwait
Kyrgyzstan
Laos
Latvia
Lebanon
Lesotho
Liberia
Libya
Liechtenstein
Lithuania
Luxembourg
Macedonia
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Mauritania
Mauritius
Mexico
Micronesia
Moldova
Monaco
Mongolia
Montenegro
Morocco
Mozambique
Myanmar, {Burma}
Namibia
Nauru
Nepal
Netherlands
New Zealand
Nicaragua
Niger
Nigeria
Norway
Oman
Pakistan
Palau
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Poland
Portugal
Qatar
Romania
Russian Federation
Rwanda
St Kitts & Nevis
St Lucia
Saint Vincent & the Grenadines
Samoa
San Marino
Sao Tome & Principe
Saudi Arabia
Senegal
Serbia
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
South Sudan
Spain
Sri Lanka
Sudan
Suriname
Swaziland
Sweden
Switzerland
Syria
Taiwan
Tajikistan
Tanzania
Thailand
Togo
Tonga
Trinidad & Tobago
Tunisia
Turkey
Turkmenistan
Tuvalu
Uganda
Ukraine
United Arab Emirates
United Kingdom
United States
Uruguay
Uzbekistan
Vanuatu
Vatican City
Venezuela
Vietnam
Yemen
Zambia
Zimbabwe
1 change: 1 addition & 0 deletions sample/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
<string name="activity_title_grid">GridView sample</string>
<string name="activity_title_gallery">Gallery sample</string>
<string name="activity_title_header">Header sample</string>
<string name="activity_title_many_items">Long list sample</string>
<string name="header_text">Header view</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.manuelpeinado.multichoiceadapter.demo.gallerysample.GalleryActivity;
import com.manuelpeinado.multichoiceadapter.demo.gridsample.GridActivity;
import com.manuelpeinado.multichoiceadapter.demo.headersample.HeaderActivity;
import com.manuelpeinado.multichoiceadapter.demo.manyitemssample.ManyItemsActivity;
import com.manuelpeinado.multichoiceadapter.demo.simplecursoradaptersample.SimpleCursorAdapterActivity;
import com.manuelpeinado.multichoiceadapter.demo.twolinesarrayadaptersample.TwoLinesArrayAdapterActivity;

Expand All @@ -42,7 +43,8 @@ public class HomeActivity extends SherlockListActivity {
new ActivityInfo(SimpleCursorAdapterActivity.class, R.string.activity_title_simple_cursor_adapter),
new ActivityInfo(GridActivity.class, R.string.activity_title_grid),
new ActivityInfo(GalleryActivity.class, R.string.activity_title_gallery),
new ActivityInfo(HeaderActivity.class, R.string.activity_title_header));
new ActivityInfo(HeaderActivity.class, R.string.activity_title_header),
new ActivityInfo(ManyItemsActivity.class, R.string.activity_title_many_items));

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand Down
Loading

0 comments on commit 5b7710f

Please sign in to comment.