【问题标题】:How to add footer to recyclerView by means supportLibrary如何通过supportLibrary向recyclerView添加页脚
【发布时间】:2015-11-07 15:56:06
【问题描述】:

我尝试了很多例子,但没有一个适合。请看一下我的代码。在 onCreateViewHolder 我有错误

Error:(64, 17) 错误:名称冲突:MyAdapter 中的 onBindViewHolder(ViewHolder,int) 和 Adapter 中的 onBindViewHolder(VH,int) 具有相同的擦除,但两者都不会覆盖另一个 其中 VH 是一个类型变量: VH 扩展了在 Adapter 类中声明的 ViewHolder

Error:(51, 36) 错误:MyAdapter 中的 onCreateViewHolder(ViewGroup,int) 无法覆盖 Adapter 中的 onCreateViewHolder(ViewGroup,int) 返回类型 ViewHolder 与 MyViewHolder 不兼容 其中 VH 是一个类型变量: VH 扩展了在 Adapter 类中声明的 ViewHolder

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>  {

ArrayList<String> dataset_;
public static final int MODE_DATA = 0;
public static final int MODE_LOADING = 1;

public static class MyViewHolder extends RecyclerView.ViewHolder{
    public TextView mTextView;
    public TextView mTextView2;

    public MyViewHolder(View v){
        super(v);
        mTextView  = (TextView) itemView.findViewById(R.id.textView);
        mTextView2 = (TextView) itemView.findViewById(R.id.textView2);
    }
}

public static class MyLoadingViewHolder extends RecyclerView.ViewHolder{
    public MyLoadingViewHolder(View v){
        super(v);
    }
}

@Override
public int getItemViewType(int position) {
    if (position == dataset_.size() - 1) {
        return MODE_LOADING;
    } else {
        return MODE_DATA;
    }
}

public MyAdapter (ArrayList<String> dataset){
    dataset_ = dataset;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    if (viewType == MODE_LOADING) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.progress_bar, parent, false);
        MyLoadingViewHolder loadingViewHolder = new MyLoadingViewHolder(v);
        return loadingViewHolder;
    } else {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false);
        MyViewHolder myViewHolder = new MyViewHolder(v);
        return myViewHolder;
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder,int position){
    if (position == MODE_LOADING){
                            // Do nothig just show progress bar
    }
    else {
        ((MyViewHolder)holder).mTextView.setText(dataset_.get(position));
        ((MyViewHolder)holder).mTextView2.setText(dataset_.get(position));
    }
}

@Override
public int getItemCount(){
    return dataset_.size();
}
}

我的进度条

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/progress_bar_panel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/progress_bar"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:visibility="visible" />

</RelativeLayout>

【问题讨论】:

    标签: android android-arrayadapter android-recyclerview


    【解决方案1】:

    使用RecyclerView.ViewHolder 作为适配器类的通用参数。 如果您希望有一个支持多种视图类型的适配器,则需要将所有 ViewHolders 的超类指定为通用参数。

    查看enter link description here 以获得更多想法 - 它展示了如何通过在单独的类中提取所有绑定/视图创建逻辑来使适配器更易于维护。在这种情况下,适配器的唯一职责是管理它配置为使用的 ViewHolder 委托。

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 2014-01-04
      • 1970-01-01
      • 2015-05-13
      • 2018-08-16
      • 2015-01-07
      • 2011-07-05
      • 2012-05-17
      • 2015-11-23
      相关资源
      最近更新 更多