如何通过supportLibrary将页脚添加到recyclerView

时间:2015-08-14 11:45:33

标签: android android-arrayadapter android-recyclerview

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

  

错误:(64,17)错误:名称冲突:MyAdapter中的onBindViewHolder(ViewHolder,int)和适配器中的onBindViewHolder(VH,int)具有相同的擦除,但都没有覆盖其他   其中VH是一个类型变量:   VH扩展了类Adapter

中声明的ViewHolder

  

错误:(51,36)错误:MyAdapter中的onCreateViewHolder(ViewGroup,int)无法覆盖适配器中的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>

1 个答案:

答案 0 :(得分:0)

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

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