无法将列表传递给自定义视图

时间:2018-05-28 08:12:04

标签: android

现在我有了这个自定义视图,我希望将数据从活动传递到此布局

public class ImageViewing extends LinearLayout {
    ArrayList<String> urlsArrayList = new ArrayList<>();
    public ImageViewing(Context context) {
        super(context);
        init();

    }

    public ImageViewing(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();

    }

    public ImageViewing(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();

    }


    public ArrayList<String> getUrlsArrayList() {
        return urlsArrayList;
    }

    public void setUrlsArrayList(ArrayList<String> urlsArrayList) {
//        this.urlsArrayList.clear();
//        this.urlsArrayList.addAll(urlsArrayList);
        this.urlsArrayList   = urlsArrayList;
        invalidate();

    }

    private void init() {
        setOrientation(HORIZONTAL);
        if (urlsArrayList != null) {
            int size = urlsArrayList.size();
            AppLogger.log("Size",""+size);
            switch (size) {
                case 0:
                    break;
                case 1:
                    onePictureView();
                    break;
                case 2:
                    twoPictureView();
                    break;
                case 3:
                    threePictureView();

                    break;
                case 4:
                    fourPictureView();
                    break;
                default:
                    moreThanFourPictureView(size);
                    break;

            }
        } else {
        }
        invalidate();

    }}

我希望传递数组列表放置列表始终为0大小

我添加了它作为视图像这样

<com.tmoo7.carmasrclub.cutomView.ImageViewing
    android:id="@+id/viewImagesLayout"
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

然后在我的活动中

  viewImagesLayout = findViewById(R.id.viewImagesLayout);
viewImagesLayout.setUrlsArrayList(model.getPostImageUrl());

任何人都可以帮助我,告诉我有什么问题 可以任何人帮助我,告诉我有什么问题 可以任何人帮助我,告诉我有什么问题

2 个答案:

答案 0 :(得分:1)

放开关案例

        switch (size) {
            case 0:
                break;
            case 1:
                onePictureView();
                break;
            case 2:
                twoPictureView();
                break;
            case 3:
                threePictureView();

                break;
            case 4:
                fourPictureView();
                break;
            default:
                moreThanFourPictureView(size);
                break;

        }

改为你的“setUrlsArryList”方法

public void setUrlsArrayList(ArrayList<String> urlsArrayList) {
    this.urlsArrayList   = urlsArrayList;
    // here
    invalidate();
    }

假设你的onePictureView(),twoPictureView(),threePictureView()方法确实改变了你的视图外观

答案 1 :(得分:1)

问题来自你的方法链的顺序:
- 构造函数()
- init(){urlsArrayList = null}
- setUrlsArrayList(urlsArrayList)
- &GT;在 init()

之后调用 setUrlsArrayList()

如果您希望您的方法以正确的顺序链接,您必须调用您的&#34; init()&#34;在此生命周期中回调&#34; onAttachedToWindow()&#34;

public class ImageViewing extends LinearLayout {

   public ImageViewing(Context context, AttributeSet attrs) {
      super(context, attrs)
   }

   private void init() {...}

   public void setUrlsArrayList(ArrayList<String> urlsArrayList) {...}

   @Override
   protected void onAttachedToWindow() {
      init()
   }
}