【问题标题】:Changing the layout of individual item for listview or recyclerview为 listview 或 recyclerview 更改单个项目的布局
【发布时间】:2016-01-10 22:57:00
【问题描述】:

我正在尝试制作一个 recyclerview 或 listview。我遇到的复杂情况是,我要显示的一些项目是带有文本的图像,而有些是视频。我在想我可以将 videoview 和 imageviews 放在同一个列表项 xml 布局上并以编程方式隐藏。我可以制作视频视图列表和带有文本的图像列表,但是当涉及到两者都取决于用户选择的内容时,我不确定从哪里开始。

感谢您的帮助。

【问题讨论】:

    标签: android listview imageview android-recyclerview android-videoview


    【解决方案1】:

    我只是整理了一个简单的示例,因为我很好奇以最有效的方式实现这一目标的最佳方式是什么。这就是我为了实现膨胀不同观点而拼凑起来的。

    我正在使用 RecyclerView 并根据我在模型中设置的内容来扩充列表项。对于此示例,我使用 setPos() 和 getPos()。如果是图像,我将视频设置为 0 和 1。然后在 getItemViewType 中,我检查 getPos() 是 0 还是 1。如果是 0,它膨胀 ViewHolderImage,如果它是 0,它膨胀 ViewHolderVideo。希望这可以帮助。

    这是这个简单的回收器的样子。

    public class Main2Activity extends AppCompatActivity {
        List<Items> items;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            items = new ArrayList<>();
            items.add(new Items().setItems("IMAGE", 0));
            items.add(new Items().setItems("VIDEO", 1));
            items.add(new Items().setItems("IMAGE", 0));
            items.add(new Items().setItems("IMAGE", 0));
            items.add(new Items().setItems("VIDEO", 1));
            RecyclerView recycler = (RecyclerView) findViewById(R.id.main_recycler);
            recycler.setLayoutManager(new LinearLayoutManager(this));
            ExampleRecyclerAdapter exampleRecyclerAdapter = new ExampleRecyclerAdapter(items);
            recycler.setAdapter(exampleRecyclerAdapter);
        }
    
        // Model
        public class Items {
            String item;
            int pos;
            // 0 = image
            // 1 = video
    
            public Items setItems(String item, int pos) {
                Items newItem = new Items();
                newItem.setItem(item);
                newItem.setPos(pos);
                return newItem;
            }
    
            public String getItem() {
                return item;
            }
    
            public void setItem(String item) {
                this.item = item;
            }
    
            public int getPos() {
                return pos;
            }
    
            public void setPos(int pos) {
                this.pos = pos;
            }
        }
    
    
        // RecyclerAdapter
        public class ExampleRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    
            private static final int VIEW_HOLDER_IMAGE = 0;
            private static final int VIEW_HOLDER_VIDEO = 1;
    
            private List<Items> listItem;
    
            public ExampleRecyclerAdapter(List<Items> listItem) {
                this.listItem = listItem;
            }
    
            @Override
            public int getItemViewType(int position) {
                if (listItem.get(position).getPos() == 0) {
                    return VIEW_HOLDER_IMAGE;
                } else {
                    return VIEW_HOLDER_VIDEO;
                }
            }
    
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                switch (viewType) {
                    case VIEW_HOLDER_IMAGE:
                        return new ViewHolderImage(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_image, parent, false));
                    case VIEW_HOLDER_VIDEO:
                        return new ViewHolderVideo(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_video, parent, false));
                    default:
                        return null;
                }
            }
    
            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder v, int pos) {
                if (v instanceof ViewHolderImage) { // Handle Image Layout
                    ViewHolderImage viewHolderImage = (ViewHolderImage) v;
                    viewHolderImage.textView.setText(String.format("%s %d", listItem.get(pos).getItem(), listItem.get(pos).getPos()));
                    viewHolderImage.itemView.setTag(viewHolderImage);
                } else if (v instanceof ViewHolderVideo) { // Handle Video Layout
                    ViewHolderVideo viewHolderVideo = (ViewHolderVideo) v;
                    viewHolderVideo.textView.setText(String.format("%s %d", listItem.get(pos).getItem(), listItem.get(pos).getPos()));
                    viewHolderVideo.itemView.setTag(viewHolderVideo);
                }
            }
    
            @Override
            public int getItemCount() {
                return listItem.size();
            }
    
            public class ViewHolderImage extends RecyclerView.ViewHolder {
    
                private TextView textView;
    
                public ViewHolderImage(final View itemView) {
                    super(itemView);
                    textView = (TextView) itemView.findViewById(R.id.main_textView);
                }
            }
    
            public class ViewHolderVideo extends RecyclerView.ViewHolder {
    
                private TextView textView;
    
                public ViewHolderVideo(final View itemView) {
                    super(itemView);
                    textView = (TextView) itemView.findViewById(R.id.main_textView);
                }
            }
        }
    }
    

    activity_main2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/main_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="transfast.com.teststuff.Main2Activity" />
    

    recycler_image.xml

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_textView"
        android:layout_width="match_parent"
        android:layout_height="72dp"
        android:background="@color/white"
        android:clickable="true"
        android:gravity="center"
        android:textSize="16sp" />
    

    recycler_video.xml

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_textView"
        android:layout_width="match_parent"
        android:layout_height="72dp"
        android:background="@android:color/black"
        android:clickable="true"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:textSize="16sp" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多