Last active
July 21, 2020 06:57
-
-
Save drmkraja/f14f38f1fc8a88047123c3907ba0c724 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Category implements ViewModel { | |
@SerializedName("id") | |
@Expose | |
private String id; | |
@SerializedName("name") | |
@Expose | |
private String name; | |
@SerializedName("image") | |
@Expose | |
private String image; | |
@SerializedName("image_url") | |
@Expose | |
private String imageUrl; | |
private Boolean isChecked; | |
public String getId() { | |
return id; | |
} | |
public void setId(String id) { | |
this.id = id; | |
} | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public String getImage() { | |
return image; | |
} | |
public void setImage(String image) { | |
this.image = image; | |
} | |
public String getImageUrl() { | |
return imageUrl; | |
} | |
public void setImageUrl(String imageUrl) { | |
this.imageUrl = imageUrl; | |
} | |
public Boolean getChecked() { | |
return isChecked; | |
} | |
public void setChecked(Boolean checked) { | |
isChecked = checked; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class CauseCategoryActivity extends BaseActivity { | |
RecyclerView mRecyclerView; | |
RendererRecyclerViewAdapter mRecyclerViewAdapter; | |
CauseCategoryViewModel mViewModel; | |
CauseCategoryViewModel.CauseViewModelFactory mFactory; | |
private ContentLoadingProgressBar progressBar; | |
private ArrayList<Category> mSelectedUsers = new ArrayList<>(); | |
@Override | |
protected void onCreate(@Nullable Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_cause); | |
mFactory = InjectorUtils.provideCauseFactory(this.getApplicationContext()); | |
mViewModel = new ViewModelProvider(this, mFactory).get(CauseCategoryViewModel.class); | |
mRecyclerView = findViewById(R.id.recyclerview); | |
progressBar = findViewById(R.id.progress); | |
mRecyclerViewAdapter = new RendererRecyclerViewAdapter(); | |
mRecyclerViewAdapter.registerRenderer(createStargazerRenderer(R.layout.item_user_full_width)); | |
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3)); | |
mRecyclerView.setAdapter(mRecyclerViewAdapter); | |
mViewModel.getCauseDetails().observe(this, apiResponse -> { | |
if (apiResponse != null) { | |
for (int i = 0; i < apiResponse.size(); i++) { | |
Category mDetail = apiResponse.get(i); | |
Log.e("Cause ACTIVITY > ", mDetail.getName()); | |
} | |
progressBar.hide(); | |
mRecyclerViewAdapter.setItems(apiResponse); | |
mRecyclerViewAdapter.notifyDataSetChanged(); | |
} | |
}); | |
} | |
private ViewRenderer createStargazerRenderer(final int layout) { | |
return new StargazerViewRenderer(layout, new Listener(), 1); | |
} | |
private class Listener implements StargazerViewRenderer.Listener { | |
@Override | |
public void onStargazerItemClicked(@NonNull final Category model, final boolean isChecked) { | |
this.onStargazerClicked(model, isChecked); | |
mRecyclerViewAdapter.notifyDataSetChanged(); | |
} | |
public void onStargazerClicked(@NonNull final Category model, final boolean isChecked) { | |
if (isChecked) { | |
Log.e("onStargazerClicked: ", "ADD >" + model.getName()); | |
mSelectedUsers.add(model); | |
} else { | |
Log.e("onStargazerClicked: ", "REMOVE >" + model.getName()); | |
mSelectedUsers.remove(model); | |
} | |
mRecyclerViewAdapter.notifyDataSetChanged(); | |
if (mSelectedUsers.isEmpty()) { | |
Log.e("SELECTION", "Please Select Anyone"); | |
} else { | |
Log.e("SELECTION", "Thanks for selecting..."); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class StargazerViewHolder extends ViewHolder { | |
public final TextView name; | |
public final ImageView avatar; | |
public final View check; | |
public StargazerViewHolder(final View itemView) { | |
super(itemView); | |
name = (TextView) itemView.findViewById(R.id.name); | |
avatar = (ImageView) itemView.findViewById(R.id.avatar); | |
check = itemView.findViewById(R.id.check); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class StargazerViewRenderer extends ViewRenderer<Category, ViewFinder> { | |
int MODE_SINGLE = 1; | |
int MODE_MULTIPLE = 2; | |
public StargazerViewRenderer(final int layoutID, @NonNull final Listener listener, int mode) { | |
super(layoutID, Category.class, (model, finder, payloads) -> finder | |
.setVisibility(R.id.check, model.getChecked() ? VISIBLE : GONE) | |
.find(R.id.avatar, (ViewProvider<AvatarView>) urlImageView -> { | |
urlImageView.setUrl(model.getImageUrl()); | |
}) | |
.setText(R.id.title, model.getName()) | |
.setOnClickListener(() -> { | |
Log.e("VR > ", "SELECTED"); | |
final boolean willChecked = finder.find(R.id.check).getVisibility() == GONE; | |
finder.find(R.id.check).setVisibility(willChecked ? VISIBLE : GONE); | |
listener.onStargazerItemClicked(model, willChecked); | |
model.setChecked(true); | |
}) | |
.setOnClickListener(R.id.check, () -> { | |
Log.e("VR > ", "DE > SELECTED"); | |
final boolean willChecked = finder.find(R.id.check).getVisibility() == GONE; | |
finder.find(R.id.check).setVisibility(willChecked ? VISIBLE : GONE); | |
listener.onStargazerItemClicked(model, willChecked); | |
model.setChecked(false); | |
})); | |
} | |
@Nullable | |
@Override | |
public ViewState createViewState() { | |
return new StargazerViewState(); | |
} | |
@Override | |
public int createViewStateID(@NonNull final Category model) { | |
return Integer.parseInt(model.getID()); | |
} | |
public interface Listener { | |
void onStargazerItemClicked(@NonNull Category model, final boolean isChecked); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class StargazerViewState implements ViewState<ViewHolder>, Serializable { | |
private int mVisibility; | |
@Override | |
public void clear(@NonNull final ViewHolder holder) { | |
holder.getViewFinder().setVisible(R.id.check, false); | |
} | |
@Override | |
public void save(@NonNull final ViewHolder holder) { | |
holder.getViewFinder().find(R.id.check, view -> mVisibility = view.getVisibility()); | |
} | |
@Override | |
public void restore(@NonNull final ViewHolder holder) { | |
holder.getViewFinder().setVisibility(R.id.check, mVisibility); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment