【问题标题】:Parse RelativeLayout, Set Content, And Add It To A LinearLayout解析RelativeLayout,设置内容,并将其添加到LinearLayout
【发布时间】:2014-06-07 05:02:31
【问题描述】:

好的...这是我的情况。

我在 HorizontalScrollView 中有一个图片轮播 - 其中包含一个 LinearLayout - 在我的 Activity 中,如下所示:

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/slider"
    android:scrollbars="none" >

    <LinearLayout
        android:id="@+id/carousel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
    />

</HorizontalScrollView>

我有一个TypedArray,循环遍历它,在每次运行时,以编程方式设置这些图像,添加一个 ClickListener 和一个标签,并将这个 ImageView 添加到 LinearLayout(在我的 Activity 布局中设置),就像这样:

    // Get the array
    final TypedArray carouselArray = getResources().obtainTypedArray(R.array.carousel_array);

    // Populate the Carousel with item
    for (int i = 0 ; i < carouselArray.length() ; ++i) {

    // Image Item               
    ImageView outerImage;

        // Set the image view resource
        if(i == 0) {
            outerImage.setImageResource(R.drawable.toy_filter_clear);
        }
        else {
            outerImage.setImageResource(carouselArray.getResourceId(i, -1));
        }

        // Set Touch Listener
        outerImage.setOnTouchListener(this);
        final String prepend = "CAROUSEL_";
        final String index = String.valueOf(i);
        final String tag = prepend.concat(index);
        outerImage.setTag(tag);

        /// Add image view to the Carousel container
        mCarouselContainer.addView(outerImage);

    }

但是现在,我刚刚发现我必须以编程方式添加第二张图片,以在特定坐标处位于第一张图片的内部/顶部(该死的 UI 用户!)。我需要将它们本质上视为相同的图像/视图,因此我假设需要将它们打包在布局中。所以我做了一个布局文件,像这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/carousel_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <ImageView
            android:id="@+id/carousel_outer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/toy_filter_normal" 
        />

        <ImageView
            android:id="@+id/carousel_inner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/carousel_outer"
            android:layout_alignRight="@+id/carousel_outer"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="5dp"
            android:src="@drawable/thumb_nofilter" 
        />

</RelativeLayout>

这具有正确的定位,并在其上设置了默认图像。所以我想要做的是进入布局文件,通过它们的 ID 获取 ImageViews,如有必要,覆盖图像,然后在循环结束时将 RelativeLayout 添加到我的 LinearLayout 中。 . 听起来很简单,对吧?

我的第一次尝试是这样做:

        RelativeLayout item = (RelativeLayout) findViewById(R.id.carousel_item);
        ImageView outerImage = (ImageView) item.findViewById(R.id.carousel_outer);
        ImageView innerImage = (ImageView) item.findViewById(R.id.carousel_inner);

...但这给了我在 ImageView 上的 NullPointer...所以我首先尝试为 RelativeLayout 充气,如下所示:

        LayoutInflater inflater = (LayoutInflater)   this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        View view = inflater.inflate(R.layout.carousel_item_layout, null);
        ImageView outerImage = (ImageView) view.findViewById(R.id.carousel_outer);
        ImageView innerImage = (ImageView) view.findViewById(R.id.carousel_inner);

这摆脱了 NPE,并且(显然)让我们像这样正确设置图像:

            if(i == 0) {
                outerImage.setImageResource(R.drawable.toy_filter_clear);
                innerImage.setImageResource(0);
            }
            else {
                outerImage.setImageResource(R.drawable.toy_filter_normal);                  
                innerImage.setImageResource(carouselArray.getResourceId(i, -1));
            }

但是当我尝试将 outerImage ImageView 添加回 LinearLayout 时,我在那里得到一个 NPE:

mCarouselContainer.addView(outerImage);

更重要的是,我不想只将一个 ImageView 添加到 LinearLayout/HorizontalScrollView - 我想以某种方式将生成的图像打包回 RelativeLayout 并将整个内容添加回我的 LinearLayout.. . 但是,值得一提的是,这也给了我一个 NPE。

男人要做什么?任何想法表示赞赏...

【问题讨论】:

    标签: android android-layout android-linearlayout android-imageview android-relativelayout


    【解决方案1】:

    好的...哇,感谢 SO Code Monkey!

    我设法通过一行修复来解决这个问题,方法是将膨胀的 View 添加到 LinearLayout 而不是 ImageView 或 RelativeLayout(它没有做任何事情),如下所示:

    mCarouselContainer.addView(view); 
    

    不知道为什么我以前没有尝试过,但我不清楚是否正在更新它的孩子是否会反映父母,可以这么说......现在我知道它是。

    我会继续提出这个问题,因为我认为这很有帮助......?

    【讨论】:

      猜你喜欢
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多