现在我有了这个自定义视图,我希望将数据从活动传递到此布局
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());
任何人都可以帮助我,告诉我有什么问题 可以任何人帮助我,告诉我有什么问题 可以任何人帮助我,告诉我有什么问题
答案 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()
如果您希望您的方法以正确的顺序链接,您必须调用您的&#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()
}
}