代码之家  ›  专栏  ›  技术社区  ›  Stein.

MikePenz FastAdapter的使用

  •  4
  • Stein.  · 技术社区  · 7 年前

    我正在尝试实现fastadapter。我只是复制了示例代码,并试图使其正常工作。当我尝试它时,它不会在我的回收器视图中显示任何内容。通过调试,我发现bindView()没有被调用。

    我的SampleItem。哈维

    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);
        }
    }
    }
    

    我的活动

    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);
    }
    }
    

    我的身材。格拉德尔

    //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'
    

    带分机:

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

    非常感谢您的帮助。

    2 回复  |  直到 7 年前
        1
  •  9
  •   Vadim Kotov First Zero    6 年前

    您需要将LayoutManager添加到RecyclerView。

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    
        2
  •  0
  •   papesky    7 年前

    根据我的经验,我是这样解决的:

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

    getType()方法错误,需要将recyclerView的ID放在负责显示数据的位置。

    在main类中(ViewHolder类的正上方)放置两个重写的方法:

    @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("");
    }
    

    希望这有帮助;)