创建一个ViewHolder工厂

时间:2018-10-31 10:17:01

标签: android android-recyclerview factory inner-classes android-viewholder

我的应用程序中有两个RecyclerView,它们都包含自己的适配器。两个适配器都有自己的静态viewHolder。 ViewHolder是静态的,以防止创建的实例和剩余的实例导致内存泄漏。

这些静态ViewHolder类看起来很相似,只是一两个参数有所不同。我想通过拥有ViewHolder工厂来缩短适配器类的代码,但是由于ViewHolder类需要是静态的,因此我不确定我想要的是否可行。

在这种情况下,有没有办法缩短重复的代码?还是我应该与“大型”适配器类保持联系。

StorageViewHolder

static class StorageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
    // the repeating item in the adapter
    final Button storageItemView;
    Context _context;

    // constructor setting the clicklisteners and buttons
    StorageViewHolder(View itemView, Context context, RecyclerviewClickListener listener)
    {
        super(itemView);
        _listener = listener;
        _context = context;
        storageItemView = itemView.findViewById(R.id.storageButton);
        itemView.setOnClickListener(this);
    }

    public void setOnItemClickListener(RecyclerviewClickListener clickListener)
    {
        StorageListAdapter._listener = clickListener;
    }

    @Override
    public void onClick(View v)
    {
        Intent intent = new Intent(_context, StorageActivity.class);
        intent.putExtra("storageID", ((Button) v).getId());
        _context.startActivity(intent);
    }
}

ShelfViewHolder

static class ShelfViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
    // the repeating item in the adapter
    final Button shelfItemView;
    Context _context;

    // constructor setting the clicklisteners and buttons
    ShelfViewHolder(View itemView, Context context, RecyclerviewClickListener listener)
    {
        super(itemView);
        _listener = listener;
        _context = context;
        shelfItemView = itemView.findViewById(R.id.storageButton);
        itemView.setOnClickListener(this);
    }

    public void setOnItemClickListener(RecyclerviewClickListener clickListener)
    {
        ShelfListAdapter._listener = clickListener;
    }

    @Override
    public void onClick(View v)
    {
        Intent intent = new Intent(_context, ShelfActivity.class);
        intent.putExtra("shelfID", ((Button) v).getText().toString());
        _context.startActivity(intent);
    }
}

0 个答案:

没有答案