如何制作水平滚动视图?

时间:2015-07-06 11:49:20

标签: android layout-inflater horizontalscrollview

我有一个包含线性布局的水平滚动视图。 像这样:

R.id.product_container_layout
  

我想要做的是添加n个相同的布局来显示   水平滚动视图中的产品集合。

下面的图片将让您了解我到目前为止所做的工作。

Expected output

为此,我已将产品集合视图添加到String[] productCollectionArr = new String[]{"Shirt", "Jewellary", "Moto X Play", "Ellis Flat"}; for (int i = 0; i < productCollectionArr.length; i++) { LinearLayout parentLayout = (LinearLayout) findViewById(R.id.product_container_layout); View child = getLayoutInflater().inflate(R.layout.item_product, null);//child.xml parentLayout.addView(child); } for (int i = 0; i < productCollectionArr.length; i++) { LinearLayout eachProductLayout = (LinearLayout) findViewById(R.id.product_container_layout); ((TextView) eachProductLayout.findViewById(R.id.product_name_tv)).setText(productCollectionArr[i]); }

field

问题在于传递价值。由于添加到product_container_layout的每个视图都具有相同的ID。因此,只有第一个元素从产品集合数组中获取值。

我可以做的是为每个视图及其元素生成视图ID,并将这些ID映射到某个名称,以便我可以通过id访问它们。

这是正确的方法还是应该做其他事情?

4 个答案:

答案 0 :(得分:1)

You need to add this  first :

 <HorizontalScrollView
                android:id="@+id/galleryImages"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/chim_image_view_divider"
                android:layout_marginTop="@dimen/twenty"
                android:focusable="false"
                android:layout_centerInParent="true"
                android:focusableInTouchMode="false"
                android:scrollbars="none" >

                <LinearLayout
                    android:id="@+id/Images_scroller_view_linear_layout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:orientation="horizontal" >
                </LinearLayout>
            </HorizontalScrollView>

ImageScrollerViewLinearLayout = (LinearLayout) findViewById(R.id.Images_scroller_view_linear_layout);
        ImageScrollerViewLinearLayout.removeAllViews();

 - addImagesTo list:

void addImages() {
        ImageScrollerViewLinearLayout.removeAllViews();

        int i = 0;
        final float scale = this.getResources().getDisplayMetrics().density;
        int pixels = 0;
        if (myImagesList != null && myImagesList.size() > 0) {
            for (i = 0; i < myImagesList.size(); i++) {

                ImageView imageView = new ImageView(this);

                pixels = (int) (60 * scale + 0.5f);

                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(pixels, pixels);
                params.setMargins(5, 0, 0, 0);
                imageView.setLayoutParams(params);
                imageView.setScaleType(ScaleType.CENTER_CROP);
                imageView.setOnClickListener(new SelectNewSingleImageClickListener());
                imageView.setImageResource(myImagesList.get(i));
                ImageScrollerViewLinearLayout.addView(imageView, i);

            }

        } 
    }

答案 1 :(得分:0)

因此,您需要在添加到容器之前填充视图或保存指向所有项目的链接。它看起来像这样:

    LinearLayout parentLayout=(LinearLayout)findViewById(R.id.linearLayout1);
for (int i = 0; i < items.size(); i ++) {
    View child = getLayoutInflater().inflate(R.layout.item_grid, null);//child.xml
((TextView) child.findViewById(R.id.name)).setText(items.get(i).getName(); // where R.id.name is a textView in your child.xml layout.
    parentLayout.addView(child);
}

毕竟,如果要更改元素,可以按索引访问元素:

parentLayout.getChildAt(index)

但如果你有很多东西,那不是个好主意。在这种情况下,您不会回收您的视图,并会消耗大量内存。 我建议使用支持库中的recyclerview

答案 2 :(得分:0)

checkSomething

答案 3 :(得分:-2)

You can use **DevSmart** library for horizontal listview which is similar to **ListView**.

    https://github.com/dinocore1/DevsmartLib-Android