ビューに「もの」を描画する目的で、OverlayBuildというクラスがありますが、何らかの理由で単純なような問題が発生しましたが、時間。問題は、クラスが2番目(3番目、4番目など)に使用されるときに、描画/ビューが親ビューに追加されないか、少なくとも表示されないことです。Androidでビューをもう一度追加することはできません
エラーの原因を特定するためにクラスを単純化しようとしましたが、それでもエラーが発生します。だからここ
は最初OverlayBuildクラスの私のコードです:あなたが見ることができるように
public static void showEmptyState(final Context context, final Button createAgentBtn, final ViewGroup parentView, final String tag) {
final OverlayBuild builder = new OverlayBuild(context, parentView, tag);
builder.setLayoutListener(new OverlayBuild.LayoutListener() {
@Override
public void layoutPrepared(ViewGroup view) {
final ViewGroup.MarginLayoutParams btnParams = (ViewGroup.MarginLayoutParams) createAgentBtn.getLayoutParams();
final int parentWidth = parentView.getWidth();
final int parentHeight = parentView.getHeight();
builder.setBackgroundDimens(parentWidth,parentHeight)
.commit();
}
});
}
:
public class OverlayBuild {
private String tag;
private Context context;
private ViewGroup container;
private RelativeLayout overlay;
public static boolean layoutLoaded;
private int backgroundWidth = 1500;
private int backgroundHeight = 1500;
private boolean overlayLayoutCompleted;
public OverlayBuild(Context context, ViewGroup container, String tag) {
this.tag = tag;
this.context = context;
this.container = container;
this.overlay = new RelativeLayout(context);
layoutLoaded = false;
}
public OverlayBuild setLayoutListener(final LayoutListener layoutListener) {
container.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!layoutLoaded) {
layoutListener.layoutPrepared(container);
layoutLoaded = true;
}
}
});
return this;
}
public OverlayBuild setBackgroundDimens(int width, int height) {
this.backgroundWidth = width;
this.backgroundHeight = height;
return this;
}
public OverlayBuild hideOverlay(){
if(overlay != null){
overlay.setVisibility(View.GONE);
}
return this;
}
public OverlayBuild commit() {
View view = getViewByTag(tag);
if (view == null) {
container.addView(overlay);
overlayLayoutCompleted = true;
overlay.setTag(tag);
overlay.bringToFront();
overlay.setVisibility(View.VISIBLE);
container.setBackgroundResource(R.color.red);
overlay.setBackgroundResource(R.color.blue_mid);
}
return this;
}
private View getViewByTag(String tag) {
return container.findViewWithTag(tag);
}
public interface LayoutListener {
void layoutPrepared(ViewGroup view);
}
そして、ここでは、私は「描く」ためにクラスを使用する方法であり、メソッドは、 "コミット()"と呼ばれる、私はいくつかの背景色を設定しています(テスト目的のため)。結論として、初めて色は画面に表示されますが、次回は表示されません。
私はそれをデバッグしました(多く!)、コード内のすべての場所に到達していることを確認できますそれはすべきだ。
私は本当に誰かが私を助けることを願っています。どんな助けでも大歓迎です。
ああ!うん、それはやるよ。 – w3bshark