Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 内置按钮的RecyclerView_Android_Android Recyclerview - Fatal编程技术网

Android 内置按钮的RecyclerView

Android 内置按钮的RecyclerView,android,android-recyclerview,Android,Android Recyclerview,我需要创建如下布局: public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int VIEW_TYPE_1 = 1, VIEW_TYPE_2 = 2; @Override public int getItemViewType(int position) { if (position == 0){

我需要创建如下布局:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static final int VIEW_TYPE_1 = 1, VIEW_TYPE_2 = 2;

@Override
public int getItemViewType(int position) {

    if (position == 0){
        return VIEW_TYPE_1;
    }else{
        return VIEW_TYPE_2;
    }

}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType){
        case VIEW_TYPE_1:
            // inflate the view with button
            break;
        case VIEW_TYPE_2:
            // inflate the view with image
            break;
    }
    return holder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (holder.getItemViewType()){
        case VIEW_TYPE_1:
            //set the viewholder for view type 1
            break;
        case VIEW_TYPE_2:
            //set the viewholder for view type 2
            break;
    }

}
带有图片和按钮的布局


我不知道该怎么做。我用不同的项目创建了RecyclerViews,但有一些共同点(比如图片、视频,它们都可以被视为媒体类型)。在本例中,第一项是按钮(或充当按钮的图像),其他项只是图片,因此我不能将它们全部放在适配器中的单个列表中,因为它们表示的逻辑不同。一个想法是在位置0中放置另一个对象,该对象指示应将其创建为按钮,然后放置图像列表,但我需要处理项目不在位置I上,而是在位置I+1上,因此我不喜欢该解决方案。有什么“干净”的方法可以做到这一点吗?

您可以像下面这样覆盖RecyclerView适配器中的getItemViewType()和onCreateViewHolder()函数:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static final int VIEW_TYPE_1 = 1, VIEW_TYPE_2 = 2;

@Override
public int getItemViewType(int position) {

    if (position == 0){
        return VIEW_TYPE_1;
    }else{
        return VIEW_TYPE_2;
    }

}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType){
        case VIEW_TYPE_1:
            // inflate the view with button
            break;
        case VIEW_TYPE_2:
            // inflate the view with image
            break;
    }
    return holder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (holder.getItemViewType()){
        case VIEW_TYPE_1:
            //set the viewholder for view type 1
            break;
        case VIEW_TYPE_2:
            //set the viewholder for view type 2
            break;
    }

}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私有静态最终整型视图\类型\ 1=1,视图\类型\ 2=2;
@凌驾
public int getItemViewType(int位置){
如果(位置==0){
返回视图类型1;
}否则{
返回视图类型2;
}
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
开关(视图类型){
案例视图类型1:
//用按钮为视图充气
打破
案例视图类型2:
//用图像膨胀视图
打破
}
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
开关(holder.getItemViewType()){
案例视图类型1:
//为视图类型1设置viewholder
打破
案例视图类型2:
//为视图类型2设置viewholder
打破
}
}
必须为每种类型的视图创建一个ViewHolder


希望这能帮助您

您需要代码吗?为什么不使用GridView,它将更适合从布局中看到的效果。您可以在RecyclerView中使用GridLayoutManager,而不是使用LinearLayoutManager和多视图类型问题不在于显示多个视图类型,问题在于位置0将是一个图像,而不是一个按钮,因此如果我一个按钮如何代替一个图像,第一个图像将永远不会显示,并且只能看到1到N。这就是我的意思。适配器上0位置的图像会发生什么情况?它永远不会显示,因为在该位置将显示按钮,而不是图像。您必须在适配器中创建两个视图保持架,一个使用带有按钮的xmln视图和其他图像视图。在位置0,适配器将使用按钮膨胀视图,在位置0后,将使用图像膨胀视图。然后在onCreateViewHolder中处理所选的视图我在onBindViewHolder中始终执行的操作是Object=list.get(位置)如果我这样做,我会遇到我说的问题,在列表的位置0上,我没有按钮,我有一个图片,位置==0的条件只是和示例。您可以在getItemViewType中使用相同的逻辑。如果对象是使用按钮的实例,则返回视图类型1,如果是使用图像的实例,则返回视图类型2函数中最重要的一点是,您必须返回适配器所在位置的视图类型。这就是问题所在!我的适配器只有图片的对象,我的适配器中没有任何按钮对象。