Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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 在特定位置将水平回收视图转换为垂直回收视图_Android_Android Recyclerview - Fatal编程技术网

Android 在特定位置将水平回收视图转换为垂直回收视图

Android 在特定位置将水平回收视图转换为垂直回收视图,android,android-recyclerview,Android,Android Recyclerview,我想将水平回收视图插入/显示到特定位置(在此示例位置:1) 垂直循环视图-显示文本视图+形状(rectange) 水平循环视图-显示图像视图(彼此相邻) .XML的 horizontal_layout.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" an

我想将水平回收视图插入/显示到特定位置(在此示例位置:1)

垂直循环视图-显示文本视图+形状(rectange) 水平循环视图-显示图像视图(彼此相邻)

.XML的

horizontal_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
    android:id="@+id/horizontal_recyclerview"
    android:layout_width="368dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="60dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="2dp"
    android:padding="0dp"/>
<android.support.v7.widget.RecyclerView
    android:id="@+id/vertical_recyclerview"
    android:layout_width="368dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="60dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="2dp"
    android:padding="0dp"/>

</android.support.constraint.ConstraintLayout>
垂直适应级

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

    private ArrayList<PictureData> pictures;
    Context context;

    public VerticalAdapter(ArrayList<PictureData> pictures, Context context) 
    {
        this.pictures = pictures;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView;
        switch (viewType) {
            case 1:
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_layout_item, parent, false);
                return new HorizontalViewHolder(itemView);
            default:
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.vertical_layout_item, parent, false);
                return new VerticalViewHolder(itemView);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (holder.getItemViewType()){
            case 1:
                HorizontalViewHolder hVh = (HorizontalViewHolder) holder;
                HorizontalAdapter horizontal_adapter = new HorizontalAdapter(pictures, context);
                hVh.horizontal_rec.setAdapter(horizontal_adapter);
                break;
            default:
                VerticalViewHolder vVh = (VerticalViewHolder) holder;
                vVh.textView.setText(pictures.get(position).getPictureUrl());
                break;
        }
    }

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

    @Override
    public int getItemViewType(int position) {
        if(position == 1){
            return 1;
        }else{
            return 0;
        }
    }

}
ublic class HorizontalAdapter extends RecyclerView.Adapter<HorizontalViewHolder> {
    private ArrayList<PictureData> pictures;
    Context context;

    public HorizontalAdapter(ArrayList<PictureData> pictures, Context context) {
        this.pictures = pictures;
        this.context = context;
    }

    @Override
    public HorizontalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_layout_item, parent, false);
        return new HorizontalViewHolder(view);
    }

    @Override
    public void onBindViewHolder(HorizontalViewHolder holder, int position) 
    {
        Picasso.Builder builder = new Picasso.Builder(context);
        Picasso picasso = builder.build();
        picasso
                .load("http://nuclearpixel.com/content/icons/2010-02-09_stellar_icons_from_space_from_2005/earth_128.png")
                .placeholder(R.mipmap.ic_launcher_round)
                .into(holder.imagePositionInLayout);
    }

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


}
水平适配器类

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

    private ArrayList<PictureData> pictures;
    Context context;

    public VerticalAdapter(ArrayList<PictureData> pictures, Context context) 
    {
        this.pictures = pictures;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView;
        switch (viewType) {
            case 1:
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_layout_item, parent, false);
                return new HorizontalViewHolder(itemView);
            default:
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.vertical_layout_item, parent, false);
                return new VerticalViewHolder(itemView);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (holder.getItemViewType()){
            case 1:
                HorizontalViewHolder hVh = (HorizontalViewHolder) holder;
                HorizontalAdapter horizontal_adapter = new HorizontalAdapter(pictures, context);
                hVh.horizontal_rec.setAdapter(horizontal_adapter);
                break;
            default:
                VerticalViewHolder vVh = (VerticalViewHolder) holder;
                vVh.textView.setText(pictures.get(position).getPictureUrl());
                break;
        }
    }

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

    @Override
    public int getItemViewType(int position) {
        if(position == 1){
            return 1;
        }else{
            return 0;
        }
    }

}
ublic class HorizontalAdapter extends RecyclerView.Adapter<HorizontalViewHolder> {
    private ArrayList<PictureData> pictures;
    Context context;

    public HorizontalAdapter(ArrayList<PictureData> pictures, Context context) {
        this.pictures = pictures;
        this.context = context;
    }

    @Override
    public HorizontalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_layout_item, parent, false);
        return new HorizontalViewHolder(view);
    }

    @Override
    public void onBindViewHolder(HorizontalViewHolder holder, int position) 
    {
        Picasso.Builder builder = new Picasso.Builder(context);
        Picasso picasso = builder.build();
        picasso
                .load("http://nuclearpixel.com/content/icons/2010-02-09_stellar_icons_from_space_from_2005/earth_128.png")
                .placeholder(R.mipmap.ic_launcher_round)
                .into(holder.imagePositionInLayout);
    }

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


}
公共类HorizontalAdapter扩展了RecyclerView.Adapter{ 私人ArrayList图片; 语境; 公共水平适配器(ArrayList图片、上下文){ 这个。图片=图片; this.context=上下文; } @凌驾 public HorizontalViewHolder onCreateViewHolder(视图组父级,int-viewType){ View=LayoutFlater.from(parent.getContext()).flate(R.layout.horizontal\u layout\u项目,parent,false); 返回新的HorizontalViewHolder(视图); } @凌驾 BindViewHolder上的公共无效(水平视图持有人,内部位置) { Picasso.Builder=新的Picasso.Builder(上下文); 毕加索毕加索=builder.build(); 毕加索 .加载(“http://nuclearpixel.com/content/icons/2010-02-09_stellar_icons_from_space_from_2005/earth_128.png") .占位符(R.mipmap.ic\u启动器\u轮) .into(holder.imagePositionInLayout); } @凌驾 public int getItemCount(){ 返回图片。大小(); } }
我是安卓新手,所以我希望人们能对什么是错误以及如何修复给出一些好的解释。每一个建议都会被欣然接受。如果有人真的对此进行调查并加以解释,我将不胜感激,因为我现在感觉很失落

我理解我丢失的部分-onCreateView方法返回需要某种布局类型的特定视图。例如,hor_布局-仅容纳RecycleView。hor_布局_项-仅保存图像视图。据我所知,我只能将一个布局传递给ViewHolder,因此,例如,如果我传递hor_布局,我将可以访问RV,但不能访问ImageView。显然,可以将两个元素放在一个布局中,但这会产生不必要的空间(ImageView下的RV),可能还有其他更简单的解决方案。有什么想法吗?谢谢。我理解我丢失的部分-onCreateView方法返回需要某种布局类型的特定视图。例如,hor_布局-仅容纳RecycleView。hor_布局_项-仅保存图像视图。据我所知,我只能将一个布局传递给ViewHolder,因此,例如,如果我传递hor_布局,我将可以访问RV,但不能访问ImageView。显然,可以将两个元素放在一个布局中,但这会产生不必要的空间(ImageView下的RV),可能还有其他更简单的解决方案。有什么想法吗?谢谢
public class VerticalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ArrayList<PictureData> pictures;
    Context context;

    public VerticalAdapter(ArrayList<PictureData> pictures, Context context) 
    {
        this.pictures = pictures;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView;
        switch (viewType) {
            case 1:
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_layout_item, parent, false);
                return new HorizontalViewHolder(itemView);
            default:
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.vertical_layout_item, parent, false);
                return new VerticalViewHolder(itemView);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (holder.getItemViewType()){
            case 1:
                HorizontalViewHolder hVh = (HorizontalViewHolder) holder;
                HorizontalAdapter horizontal_adapter = new HorizontalAdapter(pictures, context);
                hVh.horizontal_rec.setAdapter(horizontal_adapter);
                break;
            default:
                VerticalViewHolder vVh = (VerticalViewHolder) holder;
                vVh.textView.setText(pictures.get(position).getPictureUrl());
                break;
        }
    }

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

    @Override
    public int getItemViewType(int position) {
        if(position == 1){
            return 1;
        }else{
            return 0;
        }
    }

}
public class HorizontalViewHolder extends RecyclerView.ViewHolder{
    public ImageView imagePositionInLayout;
    public RecyclerView horizontal_rec;

    public HorizontalViewHolder(View itemView) {
        super(itemView);

        LinearLayoutManager layoutManager = new LinearLayoutManager(itemView.getContext(), LinearLayoutManager.HORIZONTAL, false);
        horizontal_rec = itemView.findViewById(R.id.vertical_recyclerview);
        imagePositionInLayout = itemView.findViewById(R.id.img_horizontal_slider);
        horizontal_rec.setLayoutManager(layoutManager);
    }

    public ImageView getView() {
        return imagePositionInLayout;
    }
}
ublic class HorizontalAdapter extends RecyclerView.Adapter<HorizontalViewHolder> {
    private ArrayList<PictureData> pictures;
    Context context;

    public HorizontalAdapter(ArrayList<PictureData> pictures, Context context) {
        this.pictures = pictures;
        this.context = context;
    }

    @Override
    public HorizontalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_layout_item, parent, false);
        return new HorizontalViewHolder(view);
    }

    @Override
    public void onBindViewHolder(HorizontalViewHolder holder, int position) 
    {
        Picasso.Builder builder = new Picasso.Builder(context);
        Picasso picasso = builder.build();
        picasso
                .load("http://nuclearpixel.com/content/icons/2010-02-09_stellar_icons_from_space_from_2005/earth_128.png")
                .placeholder(R.mipmap.ic_launcher_round)
                .into(holder.imagePositionInLayout);
    }

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


}