You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I just meet with this problem and I give out some ways to solve this problem.FYI
in your sourcecode you use this code
`
public void addView(@NonNull View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);
if (child.getTag() == null || (!child.getTag().equals(TAG_LOADING) &&
!child.getTag().equals(TAG_EMPTY) && !child.getTag().equals(TAG_ERROR))) {
contentViews.add(child);
}
}
`
and process the visibility every time we change to different state.
`
private void setContentVisibility(boolean visible, List<Integer> skipIds) {
for (View v : contentViews) {
if (!skipIds.contains(v.getId())) {
v.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
}
`
which means you will only process the view component in List<View> contentViews = new ArrayList<>();
but the addView method will not add the child views of a child viewgroup .which means a ImageView is inside a RelativeLayout,and the RelativeLayout is a child of ProgressActivity . In this context ,the ImageView will not be add to the contentViews instance .
so I made some changes
`
public void addView(@NonNull View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);
if (child.getTag() == null || (!child.getTag().equals(TAG_LOADING) &&
!child.getTag().equals(TAG_EMPTY) && !child.getTag().equals(TAG_ERROR))) {
// contentViews.add(child);
contentViews.addAll(getAllChildren(child));
Log.i("ProgressActivity", "sub children count of ProgressActivity is" + contentViews.size());
}
}
/**
* save all of the direct and indirect children views
*
* @param
*/
private List<View> getAllChildren(View v) {
if (!(v instanceof ViewGroup)) {
List<View> viewArrayList = new ArrayList<>();
viewArrayList.add(v);
return viewArrayList;
} else {
if (((ViewGroup) v).getChildCount() == 0) {
List<View> viewArrayList = new ArrayList<>();
viewArrayList.add(v);
return viewArrayList;
} else {
List<View> result = new ArrayList<>();
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
List<View> viewArrayList = new ArrayList<>();
viewArrayList.add(v);
viewArrayList.addAll(getAllChildren(child));
result.addAll(viewArrayList);
}
return result;
}
}
}`
now the instance of contentViews includes all of the chilrend and grandson ....component.
one more changes is needed:
`
/**
* set children visibility of StatusLayout
*
* @param visible
* @param skipIds
*/
private void setContentVisibility(boolean visible, List<Integer> skipIds) {
for (View v : contentViews) {
if (!skipIds.contains(v.getId())) {
v.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
// when visible is true,which means set content Layout, the skipIds compoent need to be hide
if (visible) {
if (skipIds.contains(v.getId())) {
v.setVisibility(View.INVISIBLE);
}
}
//set parent to be visible when child want to be visible
if (v.getVisibility() == View.VISIBLE) {
setParentToVisible(v);
}
}
}
`
`
public void setParentToVisible(View v) {
ViewParent mParent = v.getParent();
if (mParent != null && mParent instanceof ViewGroup) {
((ViewGroup) mParent).setVisibility(View.VISIBLE);
if (mParent.getParent() != null) {
setParentToVisible((View) mParent);
}
}
}
`
the part of code which I add .means the example ImageView I told in this issue before if i skip to hide it .I needed to set it to visible .but at the same time ,we need to set its parent to be visible ,which is the RelativeLayout -the child of ProgressActivity.
For anyone who meet with this problem's recommendation.
The text was updated successfully, but these errors were encountered:
I just meet with this problem and I give out some ways to solve this problem.FYI
in your sourcecode you use this code
`
`
and process the visibility every time we change to different state.
`
`
which means you will only process the view component in
List<View> contentViews = new ArrayList<>();
but the addView method will not add the child views of a child viewgroup .which means a ImageView is inside a RelativeLayout,and the RelativeLayout is a child of ProgressActivity . In this context ,the ImageView will not be add to the contentViews instance .
so I made some changes
`
now the instance of contentViews includes all of the chilrend and grandson ....component.
one more changes is needed:
`
`
`
`
the part of code which I add .means the example ImageView I told in this issue before if i skip to hide it .I needed to set it to visible .but at the same time ,we need to set its parent to be visible ,which is the RelativeLayout -the child of ProgressActivity.
For anyone who meet with this problem's recommendation.
The text was updated successfully, but these errors were encountered: