4

I am trying to implement the fastadapter. I just copied the sample code and tried to get it working. When I try it out it does not show anything in my recycler view. With debugging I found out that bindView() ist not getting called.

My SampleItem.jave

public class SimpleItem extends AbstractItem<SimpleItem, SimpleItem.ViewHolder> {
public StringHolder name;
public StringHolder description;

//The unique ID for this type of item
@Override
public int getType() {
    return (int) System.currentTimeMillis();
}

//The layout to be used for this type of item
@Override
public int getLayoutRes() {
    return R.layout.sample_item;
}

@Override
public ViewHolder getViewHolder(@NonNull View v) {
    return new ViewHolder(v);
}

public void setName(String name){
    this.name = new StringHolder(name);
}

public void setDescription(String description){
    this.description = new StringHolder(description);
}

@Override
public String toString() {
    return String.valueOf(name.getText()) + description.getText();
}

/**
 * our ViewHolder
 */
protected static class ViewHolder extends FastAdapter.ViewHolder<SimpleItem> {
    @BindView(R.id.material_drawer_name)
    TextView name;
    @BindView(R.id.material_drawer_description)
    TextView description;

    public ViewHolder(View view) {
        super(view);
        ButterKnife.bind(this, view);
    }

    @Override
    public void bindView(SimpleItem item, List<Object> payloads) {
        Log.d("onBind","bind view called"); //does not get called
        StringHolder.applyTo(item.name, name);
        StringHolder.applyToOrHide(item.description, description);
    }

    @Override
    public void unbindView(SimpleItem item) {
        name.setText(null);
        description.setText(null);
    }
}
}

My Activity

public class SampleActivity extends AppCompatActivity {
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_card_view);
    ButterKnife.bind(this);
    //create the ItemAdapter holding your Items
    ItemAdapter itemAdapter = new ItemAdapter();
    //create the managing FastAdapter, by passing in the itemAdapter
    FastAdapter fastAdapter = FastAdapter.with(itemAdapter);

    //set our adapters to the RecyclerView
    recyclerView.setAdapter(fastAdapter);

    ArrayList<SimpleItem> items = new ArrayList<>();
    for (int i = 0 ; i < 20;i++){
        SimpleItem simpleItem = new SimpleItem();
        simpleItem.setName("this is a name");
        simpleItem.setDescription("this is a description - " + i);
        items.add(simpleItem);
    }
    Log.d("items:" , items.toString());
    //set the items to your ItemAdapter
    itemAdapter.add(items);
}
}

My build.gradle

//for fastadapter
implementation "com.mikepenz:fastadapter:$rootProject.fastAdapterVersion@aar"
implementation  "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
implementation  "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
implementation "com.mikepenz:fastadapter-commons:$rootProject.fastAdapterVersion@aar"
implementation "com.mikepenz:fastadapter-extensions-expandable:$rootProject.fastAdapterVersion@aar"
implementation "com.mikepenz:fastadapter-extensions:$rootProject.fastAdapterVersion@aar"
implementation  "com.android.support:design:$rootProject.supportLibraryVersion"
//The tiny Materialize library used for its useful helper classes - also needed for fastadapter
implementation "com.mikepenz:materialize:$rootProject.materializeVersion@aar"

//butterknife
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

With ext:

fastAdapterVersion = "3.2.4"
materializeVersion = "1.1.2"
supportLibraryVersion = '26.1.0'

Thanks in adavance for any help.

Stein.
  • 1,412
  • 2
  • 10
  • 18

2 Answers2

9

You need to add LayoutManager to RecyclerView.

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Sz-Nika Janos
  • 811
  • 6
  • 19
0

in my experience, I fixed this in this way:

@Override
public void bindView(SimpleItem item, List<Object> payloads) {
}

@Override
public void unbindView(SimpleItem item) {
}

The getType() method is wrong, you need to put the ID of the recyclerView in charge to show the data.

Inside the main class (just above the ViewHolder class) put the 2 overridden methods:

@Override
public void bindView(ViewHolder holder, List<Object> payloads) {
    super.bindView(holder, payloads);
    Log.d("onBind","bind view called"); //does not get called
    holder.name.setText(name);
    holder.description.setText(description);
}

@Override
public void unbindView(ViewHolder holder) {
    holder.name.setText("");
    holder.description.setText("");
}

Hope this help ;)

papesky
  • 637
  • 1
  • 8
  • 20