Skip to content
This repository was archived by the owner on Jan 2, 2021. It is now read-only.

Commit 1aee29d

Browse files
committed
Add sample for ActionMode, Expandable group/item.
1 parent 74884f5 commit 1aee29d

24 files changed

Lines changed: 791 additions & 71 deletions

sample/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@
5555
<activity
5656
android:name=".infinite.scroll.InfiniteScrollActivity"
5757
android:label="@string/label_infinite"/>
58+
<activity
59+
android:name=".expandable.item.ExpandableItemActivity"
60+
android:label="@string/label_expandable_item"/>
61+
<activity
62+
android:name=".expandable.group.ExpandableGroupActivity"
63+
android:label="@string/label_expandable_group"/>
5864
</application>
5965

6066
</manifest>

sample/src/main/java/com/ahamed/sample/SampleActivity.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121
import android.view.View;
2222
import com.ahamed.multiviewadapter.BaseViewHolder;
2323
import com.ahamed.sample.common.BaseActivity;
24+
import com.ahamed.sample.contextual.action.mode.ContextualActionModeActivity;
2425
import com.ahamed.sample.data.binding.DataBindingActivity;
26+
import com.ahamed.sample.expandable.group.ExpandableGroupActivity;
27+
import com.ahamed.sample.expandable.item.ExpandableItemActivity;
2528
import com.ahamed.sample.grid.GridAdapterActivity;
2629
import com.ahamed.sample.infinite.scroll.InfiniteScrollActivity;
2730
import com.ahamed.sample.multilist.MultiListActivity;
@@ -59,11 +62,13 @@ private List<String> populateData() {
5962

6063
dataList.add(getString(R.string.label_simple_adapter));
6164
dataList.add(getString(R.string.label_simple_grid));
62-
dataList.add("Multiple data set");
65+
dataList.add(getString(R.string.label_multi_set));
6366
dataList.add(getString(R.string.label_data_binding));
64-
dataList.add("Swipe to dismiss");
65-
dataList.add("Infinite scrolling");
66-
dataList.add("Contextual action mode");
67+
dataList.add(getString(R.string.label_swipe_to_dismiss));
68+
dataList.add(getString(R.string.label_infinite));
69+
dataList.add(getString(R.string.label_expandable_item));
70+
dataList.add(getString(R.string.label_expandable_group));
71+
dataList.add(getString(R.string.label_action_mode));
6772
return dataList;
6873
}
6974

@@ -87,6 +92,15 @@ private void gotoNextActivity(int position) {
8792
case 5:
8893
InfiniteScrollActivity.start(this);
8994
break;
95+
case 6:
96+
ExpandableItemActivity.start(this);
97+
break;
98+
case 7:
99+
ExpandableGroupActivity.start(this);
100+
break;
101+
case 8:
102+
ContextualActionModeActivity.start(this);
103+
break;
90104
}
91105
}
92106
}

sample/src/main/java/com/ahamed/sample/common/binder/BikeBinder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import android.widget.TextView;
2323
import com.ahamed.multiviewadapter.BaseViewHolder;
2424
import com.ahamed.multiviewadapter.ItemBinder;
25-
import com.ahamed.multiviewadapter.ItemDecorator;
25+
import com.ahamed.multiviewadapter.util.ItemDecorator;
2626
import com.ahamed.sample.R;
2727
import com.ahamed.sample.common.model.Bike;
2828

sample/src/main/java/com/ahamed/sample/common/binder/BirdBinder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import android.widget.TextView;
2323
import com.ahamed.multiviewadapter.BaseViewHolder;
2424
import com.ahamed.multiviewadapter.ItemBinder;
25-
import com.ahamed.multiviewadapter.ItemDecorator;
25+
import com.ahamed.multiviewadapter.util.ItemDecorator;
2626
import com.ahamed.sample.R;
2727
import com.ahamed.sample.common.model.Bird;
2828

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* Copyright 2017 Riyaz Ahamed
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.ahamed.sample.common.binder;
18+
19+
import android.view.LayoutInflater;
20+
import android.view.View;
21+
import android.view.ViewGroup;
22+
import android.widget.ImageView;
23+
import android.widget.TextView;
24+
import com.ahamed.multiviewadapter.BaseViewHolder;
25+
import com.ahamed.multiviewadapter.ItemBinder;
26+
import com.ahamed.multiviewadapter.util.ItemDecorator;
27+
import com.ahamed.sample.R;
28+
import com.ahamed.sample.common.model.SelectableItem;
29+
30+
public class SelectableBinder extends ItemBinder<SelectableItem, SelectableBinder.ViewHolder> {
31+
32+
private BaseViewHolder.OnItemLongClickListener<SelectableItem> listener;
33+
34+
public SelectableBinder(ItemDecorator itemDecorator,
35+
BaseViewHolder.OnItemLongClickListener<SelectableItem> listener) {
36+
super(itemDecorator);
37+
this.listener = listener;
38+
}
39+
40+
@Override public ViewHolder create(LayoutInflater layoutInflater, ViewGroup parent) {
41+
return new ViewHolder(layoutInflater.inflate(R.layout.item_selectable, parent, false),
42+
listener);
43+
}
44+
45+
@Override public void bind(ViewHolder holder, SelectableItem item) {
46+
holder.tvTitle.setText(item.getContent());
47+
holder.ivIndicator.setImageResource(
48+
holder.isItemSelected() ? R.drawable.drawable_selection_indicator
49+
: R.drawable.drawable_circle);
50+
}
51+
52+
@Override public boolean canBindData(Object item) {
53+
return item instanceof SelectableItem;
54+
}
55+
56+
@Override public int getSpanSize(int maxSpanCount) {
57+
return maxSpanCount;
58+
}
59+
60+
static class ViewHolder extends BaseViewHolder<SelectableItem> {
61+
62+
private TextView tvTitle;
63+
private ImageView ivIndicator;
64+
65+
ViewHolder(View itemView,
66+
final BaseViewHolder.OnItemLongClickListener<SelectableItem> listener) {
67+
super(itemView);
68+
tvTitle = (TextView) itemView.findViewById(R.id.tv_content);
69+
ivIndicator = (ImageView) itemView.findViewById(R.id.iv_selection_indicator);
70+
71+
setItemLongClickListener(new OnItemLongClickListener<SelectableItem>() {
72+
@Override public boolean onItemLongClick(View view, SelectableItem item) {
73+
toggleItemSelection();
74+
listener.onItemLongClick(view, item);
75+
return true;
76+
}
77+
});
78+
79+
setItemClickListener(new OnItemClickListener<SelectableItem>() {
80+
@Override public void onItemClick(View view, SelectableItem item) {
81+
if (isInActionMode()) {
82+
toggleItemSelection();
83+
}
84+
}
85+
});
86+
}
87+
}
88+
}

sample/src/main/java/com/ahamed/sample/contextual/action/mode/ContextualAdapter.java renamed to sample/src/main/java/com/ahamed/sample/common/model/ExpandableItem.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.ahamed.sample.contextual.action.mode;
17+
package com.ahamed.sample.common.model;
18+
19+
public class ExpandableItem {
20+
21+
public String name;
22+
23+
1824

19-
public class ContextualAdapter {
2025
}

sample/src/main/java/com/ahamed/sample/contextual/action/mode/MailAdapter.java renamed to sample/src/main/java/com/ahamed/sample/common/model/SelectableItem.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,19 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.ahamed.sample.contextual.action.mode;
17+
package com.ahamed.sample.common.model;
1818

19-
import com.ahamed.multiviewadapter.DataListManager;
20-
import com.ahamed.multiviewadapter.RecyclerAdapter;
21-
import com.ahamed.sample.common.model.Mail;
22-
import java.util.List;
19+
public class SelectableItem {
2320

24-
public class MailAdapter extends RecyclerAdapter {
21+
private int id;
22+
private String content;
2523

26-
private DataListManager<Mail> mailListManager;
27-
28-
public MailAdapter() {
29-
this.mailListManager = new DataListManager<>(this);
30-
addDataManager(mailListManager);
31-
32-
registerBinder(new MailBinder());
24+
public SelectableItem(int id, String content) {
25+
this.id = id;
26+
this.content = content;
3327
}
3428

35-
public void setMailList(List<Mail> dataList) {
36-
mailListManager.set(dataList);
29+
public String getContent() {
30+
return content;
3731
}
38-
}
32+
}

sample/src/main/java/com/ahamed/sample/contextual/action/mode/ContextualActionModeActivity.java

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,104 @@
1616

1717
package com.ahamed.sample.contextual.action.mode;
1818

19+
import android.content.Context;
20+
import android.content.Intent;
21+
import android.support.v7.view.ActionMode;
22+
import android.support.v7.widget.LinearLayoutManager;
23+
import android.view.Menu;
24+
import android.view.MenuItem;
25+
import android.view.View;
26+
import com.ahamed.multiviewadapter.BaseViewHolder;
27+
import com.ahamed.multiviewadapter.DataListManager;
28+
import com.ahamed.multiviewadapter.SelectableAdapter;
29+
import com.ahamed.multiviewadapter.listener.MultiSelectionChangedListener;
30+
import com.ahamed.multiviewadapter.util.ItemDecorator;
31+
import com.ahamed.multiviewadapter.util.SimpleDividerDecoration;
1932
import com.ahamed.sample.common.BaseActivity;
33+
import com.ahamed.sample.common.binder.SelectableBinder;
34+
import com.ahamed.sample.common.model.SelectableItem;
35+
import java.util.ArrayList;
36+
import java.util.List;
2037

2138
public class ContextualActionModeActivity extends BaseActivity {
2239

40+
private ActionMode actionMode;
41+
private SelectableAdapter adapter;
42+
private DataListManager<SelectableItem> selectableItemDataListManager;
43+
44+
public static void start(Context context) {
45+
Intent starter = new Intent(context, ContextualActionModeActivity.class);
46+
context.startActivity(starter);
47+
}
48+
2349
@Override protected void setUpAdapter() {
50+
ItemDecorator itemDecorator =
51+
new SimpleDividerDecoration(this, SimpleDividerDecoration.VERTICAL);
52+
53+
adapter = new SelectableAdapter();
54+
selectableItemDataListManager = new DataListManager<>(adapter);
55+
selectableItemDataListManager.setMultiSelectionChangedListener(
56+
new MultiSelectionChangedListener<SelectableItem>() {
57+
@Override
58+
public void onMultiSelectionChangedListener(List<SelectableItem> selectedItems) {
59+
if (selectedItems.size() == 0) {
60+
toggleActionMode();
61+
} else if (actionMode != null) {
62+
actionMode.setTitle(selectedItems.size() + " selected items");
63+
}
64+
}
65+
});
66+
67+
adapter.addDataManager(selectableItemDataListManager);
68+
adapter.registerBinder(new SelectableBinder(itemDecorator,
69+
new BaseViewHolder.OnItemLongClickListener<SelectableItem>() {
70+
@Override public boolean onItemLongClick(View view, SelectableItem item) {
71+
toggleActionMode();
72+
return true;
73+
}
74+
}));
75+
76+
adapter.setSelectionMode(SelectableAdapter.SELECTION_MODE_MULTIPLE);
77+
78+
LinearLayoutManager llm = new LinearLayoutManager(getApplicationContext());
79+
recyclerView.addItemDecoration(adapter.getItemDecorationManager());
80+
recyclerView.setLayoutManager(llm);
81+
recyclerView.setAdapter(adapter);
82+
83+
List<SelectableItem> dataList = new ArrayList<>();
84+
for (int i = 1; i <= 35; i++) {
85+
dataList.add(new SelectableItem(i, "Item " + i));
86+
}
87+
selectableItemDataListManager.set(dataList);
88+
}
89+
90+
private void toggleActionMode() {
91+
if (null == actionMode) {
92+
adapter.startActionMode();
93+
actionMode = startSupportActionMode(new ActionMode.Callback() {
94+
@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) {
95+
mode.setTitle("1 selected item");
96+
return true;
97+
}
98+
99+
@Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
100+
return true;
101+
}
102+
103+
@Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
104+
return false;
105+
}
24106

107+
@Override public void onDestroyActionMode(ActionMode mode) {
108+
adapter.stopActionMode();
109+
selectableItemDataListManager.clearSelectedItems();
110+
}
111+
});
112+
} else {
113+
actionMode.finish();
114+
actionMode = null;
115+
adapter.stopActionMode();
116+
selectableItemDataListManager.clearSelectedItems();
117+
}
25118
}
26119
}

sample/src/main/java/com/ahamed/sample/contextual/action/mode/MailBinder.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)