Skip to content

Commit

Permalink
SpinnerAdapter allow manage different views
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelbcr committed Apr 8, 2016
1 parent af2b604 commit 5230565
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 82 deletions.
62 changes: 0 additions & 62 deletions .idea/misc.xml

This file was deleted.

18 changes: 11 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Add OkAdapter dependency to project level build.gradle.

```gradle
dependencies {
compile 'com.github.FuckBoilerplate:OkAdapters:0.0.2'
compile 'com.github.FuckBoilerplate:OkAdapters:0.0.3'
}
```

Expand Down Expand Up @@ -65,11 +65,12 @@ Create a class which extends from any Android `ViewGroup` and implements [BindVi
```

## Spinner
Create a class which extends from any Android `ViewGroup` and implements [OkSpinnerAdapter.Binder](https://github.com/FuckBoilerplate/OkAdapters/blob/master/library/src/main/java/library/spinner/OkSpinnerAdapter.java). This approach allows to encapsulate the binding between the data and the `view`.
Create a class which extends from any Android `ViewGroup` and implements [OkSpinnerAdapter.Binder](https://github.com/FuckBoilerplate/OkAdapters/blob/master/library/src/main/java/library/spinner/OkSpinnerAdapter.java) and [OkSpinnerAdapter.BinderDropDown](https://github.com/FuckBoilerplate/OkAdapters/blob/master/library/src/main/java/library/spinner/OkSpinnerAdapter.java) for the same `view` or for two different `views` which implement each interface separately. This approach allows to encapsulate the binding between the data and the `view`.

```java

public class YourModelViewGroup extends FrameLayout implements OkSpinnerAdapter.Binder<YourModel> {
public class YourModelViewGroup extends FrameLayout implements OkSpinnerAdapter.Binder<YourModel>, OkSpinnerAdapter.BinderDropDown<YourModel> {
@Bind(R.id.tv_value) TextView tv_value;

public YourModelViewGroup(Context context) {
super(context);
Expand All @@ -78,8 +79,6 @@ public class YourModelViewGroup extends FrameLayout implements OkSpinnerAdapter.
ButterKnife.bind(this, view);
}

@Bind(R.id.tv_value) TextView tv_value;

@Override
public void bindDropDownView(YourModel model, int position) {
tv_value.setText(model.getValue());
Expand All @@ -93,17 +92,22 @@ public class YourModelViewGroup extends FrameLayout implements OkSpinnerAdapter.

```

Now instantiate [OkSpinnerAdapter](https://github.com/FuckBoilerplate/OkAdapters/blob/master/library/src/main/java/library/spinner/OkSpinnerAdapter.java) using the previous `OkSpinnerAdapter.Binder` implementation class and use it as a normal `adapter`.
Now instantiate [OkSpinnerAdapter](https://github.com/FuckBoilerplate/OkAdapters/blob/master/library/src/main/java/library/spinner/OkSpinnerAdapter.java) using the previous `OkSpinnerAdapter.Binder` and `OkSpinnerAdapter.BinderDropDown` implementation class and use it as a normal `adapter`.

```java

List<YourModel> items = getItems();

OkSpinnerAdapter<YourModel, YourModelViewGroup> adapter = new OkSpinnerAdapter<YourModel, YourModelViewGroup>(context, items) {
OkSpinnerAdapter<YourModel, YourModelViewGroup, YourModelViewGroup> adapter = new OkSpinnerAdapter<YourModel, YourModelViewGroup, YourModelViewGroup>(context, items) {
@Override
public YourModelViewGroup inflateView() {
return new YourModelViewGroup(context);
}

@Override
public YourModelViewGroup inflateDropDownView() {
return new YourModelViewGroup(context);
}
};

spinner.setAdapter(adapter);
Expand Down
7 changes: 3 additions & 4 deletions app/src/main/java/app/spinner/ItemSpinnerViewGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
import library.spinner.OkSpinnerAdapter;

/**
* Created by victor on 08/04/16.
* Created by miguel on 08/04/16.
*/
public class ItemSpinnerViewGroup extends FrameLayout implements OkSpinnerAdapter.Binder<Item> {
public class ItemSpinnerViewGroup extends FrameLayout implements OkSpinnerAdapter.Binder<Item>, OkSpinnerAdapter.BinderDropDown<Item> {
@Bind(R.id.tv_value) TextView tv_value;

public ItemSpinnerViewGroup(Context context) {
super(context);
Expand All @@ -24,8 +25,6 @@ public ItemSpinnerViewGroup(Context context) {
ButterKnife.bind(this, view);
}

@Bind(R.id.tv_value) TextView tv_value;

@Override
public void bindDropDownView(Item item, int position) {
tv_value.setText(item.getValue());
Expand Down
18 changes: 12 additions & 6 deletions app/src/main/java/app/spinner/SpinnerActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,18 @@ public class SpinnerActivity extends AppCompatActivity {
}

private void setUpSpinner() {
OkSpinnerAdapter<Item, ItemSpinnerViewGroup> adapter = new OkSpinnerAdapter<Item, ItemSpinnerViewGroup>(SpinnerActivity.this, getItems()) {
@Override
public ItemSpinnerViewGroup inflateView() {
return new ItemSpinnerViewGroup(SpinnerActivity.this);
}
};
OkSpinnerAdapter<Item, ItemSpinnerViewGroup, ItemSpinnerViewGroup> adapter =
new OkSpinnerAdapter<Item, ItemSpinnerViewGroup, ItemSpinnerViewGroup>(SpinnerActivity.this, getItems()) {
@Override
public ItemSpinnerViewGroup inflateView() {
return new ItemSpinnerViewGroup(SpinnerActivity.this);
}

@Override
public ItemSpinnerViewGroup inflateDropDownView() {
return new ItemSpinnerViewGroup(SpinnerActivity.this);
}
};

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
Expand Down
12 changes: 9 additions & 3 deletions library/src/main/java/library/spinner/OkSpinnerAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,19 @@
* @param <T> The model data associated with the view.
* @param <V> The view
*/
public abstract class OkSpinnerAdapter<T, V extends View & OkSpinnerAdapter.Binder<T>> extends ArrayAdapter<T> {
public abstract class OkSpinnerAdapter<T, V extends View & OkSpinnerAdapter.Binder<T>, VD extends View & OkSpinnerAdapter.BinderDropDown<T>> extends ArrayAdapter<T> {
protected List<T> items = new ArrayList<>();

public interface Binder<T> {
void bindDropDownView(T item, int position);
void bindView(T item, int position);
}

public interface BinderDropDown<T> {
void bindDropDownView(T item, int position);
}

public abstract V inflateView();
public abstract VD inflateDropDownView();

public List<T> getItems() {
return items;
Expand All @@ -37,7 +41,7 @@ public OkSpinnerAdapter(Context context, List<T> items) {
@Override
public View getDropDownView(final int position, View convertView, ViewGroup parent) {
final T item = items.get(position);
final V view = (convertView == null) ? inflateView() : (V) convertView;
final VD view = (convertView == null) ? inflateDropDownView() : (VD) convertView;

convertView = view;
view.bindDropDownView(item, position);
Expand All @@ -49,8 +53,10 @@ public View getDropDownView(final int position, View convertView, ViewGroup pare
public View getView(int position, View convertView, ViewGroup parent) {
final T item = items.get(position);
final V view = (convertView == null) ? inflateView() : (V) convertView;

convertView = view;
view.bindView(item, position);

return convertView;
}
}

0 comments on commit 5230565

Please sign in to comment.