package com.jdroid.android.sample.ui.recyclerview;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.jdroid.android.fragment.FragmentHelper;
import com.jdroid.android.recycler.AbstractRecyclerFragment;
import com.jdroid.android.recycler.RecyclerViewAdapter;
import com.jdroid.android.recycler.RecyclerViewType;
import com.jdroid.android.sample.R;
import com.jdroid.android.sample.usecase.SampleItemsUseCase;
import com.jdroid.java.collections.Lists;
import com.jdroid.java.utils.IdGenerator;
import java.util.List;
public class ComplexRecyclerFragment extends AbstractRecyclerFragment {
private RecyclerViewAdapter adapter;
private SampleItemsUseCase sampleItemsUseCase;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sampleItemsUseCase = new SampleItemsUseCase();
}
@Override
public void onStart() {
super.onStart();
registerUseCase(sampleItemsUseCase, this, FragmentHelper.UseCaseTrigger.ONCE);
}
@Override
public void onStop() {
super.onStop();
unregisterUseCase(sampleItemsUseCase, this);
}
@Override
public void onFinishUseCase() {
executeOnUIThread(new Runnable() {
@Override
public void run() {
List<RecyclerViewType> recyclerViewTypes = Lists.<RecyclerViewType>newArrayList(new StringRecyclerViewType(), new IntegerRecyclerViewType(), new BooleanRecyclerViewType());
adapter = new RecyclerViewAdapter(recyclerViewTypes, sampleItemsUseCase.getComplexItems());
setAdapter(adapter);
dismissLoading();
}
});
}
@Override
public Integer getMenuResourceId() {
return R.menu.recycler_menu;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
adapter.addItem(IdGenerator.getIntId().toString());
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected Boolean isDividerItemDecorationEnabled() {
return true;
}
public class StringRecyclerViewType extends RecyclerViewType<String, StringViewHolder> {
@Override
protected Integer getLayoutResourceId() {
return R.layout.item;
}
@Override
protected Class<String> getItemClass() {
return String.class;
}
@Override
public RecyclerView.ViewHolder createViewHolderFromView(View view) {
StringViewHolder viewHolder = new StringViewHolder(view);
viewHolder.textView = findView(view, R.id.name);
return viewHolder;
}
@Override
public void fillHolderFromItem(String item, StringViewHolder holder) {
holder.textView.setText(item);
}
@Override
public AbstractRecyclerFragment getAbstractRecyclerFragment() {
return ComplexRecyclerFragment.this;
}
@Override
public void onItemSelected(String item, View view) {
adapter.removeItem(item);
}
}
public static class StringViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public StringViewHolder(View itemView) {
super(itemView);
}
}
public class IntegerRecyclerViewType extends RecyclerViewType<Integer, IntegerViewHolder> {
@Override
protected Integer getLayoutResourceId() {
return R.layout.item;
}
@Override
protected Class<Integer> getItemClass() {
return Integer.class;
}
@Override
public RecyclerView.ViewHolder createViewHolderFromView(View view) {
IntegerViewHolder viewHolder = new IntegerViewHolder(view);
viewHolder.textView = findView(view, R.id.name);
return viewHolder;
}
@Override
public void fillHolderFromItem(Integer item, IntegerViewHolder holder) {
holder.textView.setText(item.toString());
}
@Override
protected Boolean isClickable() {
return false;
}
@Override
public AbstractRecyclerFragment getAbstractRecyclerFragment() {
return ComplexRecyclerFragment.this;
}
}
public static class IntegerViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public IntegerViewHolder(View itemView) {
super(itemView);
}
}
public class BooleanRecyclerViewType extends RecyclerViewType<Boolean, BooleanViewHolder> {
@Override
protected Integer getLayoutResourceId() {
return R.layout.item;
}
@Override
protected Class<Boolean> getItemClass() {
return Boolean.class;
}
@Override
public RecyclerView.ViewHolder createViewHolderFromView(View view) {
BooleanViewHolder viewHolder = new BooleanViewHolder(view);
viewHolder.textView = findView(view, R.id.name);
return viewHolder;
}
@Override
public void fillHolderFromItem(Boolean item, BooleanViewHolder holder) {
holder.textView.setText(item.toString());
}
@Override
protected Boolean isClickable() {
return false;
}
@Override
public AbstractRecyclerFragment getAbstractRecyclerFragment() {
return ComplexRecyclerFragment.this;
}
}
public static class BooleanViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public BooleanViewHolder(View itemView) {
super(itemView);
}
}
}