代码之家  ›  专栏  ›  技术社区  ›  Elsunhoty

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

  •  0
  • Elsunhoty  · 技术社区  · 8 年前

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

    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();
    
        }}
    

    而我要传递的数组列表Put列表总是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 回复  |  直到 8 年前
        1
  •  1
  •   Patrick Chan    8 年前

    把开关箱放好

            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;
    
            }
    

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

    假设onePictureView()、twopicTureView()、threpicTureView()方法确实更改了视图的外观

        2
  •  1
  •   Vincent Chann    8 年前

    问题来自于方法链的顺序:
    -构造函数()
    -init()urlArrayList=空
    -设置urlarraylist(urlarraylist)
    gt; 设置URL数组列表() 在之后调用 ()

    如果希望方法按正确的顺序链接,则必须在此生命周期回调“OnAttachedToWindow()”中调用“init()”。

    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()
       }
    }