Michel Melhem
Michel Melhem

Reputation: 681

How to update my view because of a state that change?

I'm new to native android developpement and i can't figure out how i could update my ui in response to a state change.

In this cas i want that my View return a TextView if Is loading == true and then when IsLoading go to false my View update to return view

This is my code:

public class FlutterPdfView implements PlatformView, MethodCallHandler {
    private PDFView view;
    private String path;
    private File pdf;
    private boolean isLoading;
    private final MethodChannel methodChannel;
    private OnRenderListener onRenderListener;
    private TextView textView;
    private PDFView.OnLayoutChangeListener onLayoutChangeListener;



    FlutterPdfView(final Context context, int id, Object args,  BinaryMessenger messenger ) {
        try {
            methodChannel = new MethodChannel(messenger, "\"plugins.smartwork.flutter_pdfview/pdfview_" + id);
            isLoading = true;
            textView = new TextView(context);
            onRenderListener = new OnRenderListener() {
                @Override
                public void onInitiallyRendered(int nbPages) {
                    isLoading = false;
                }
            };
            view = new PDFView(context, null);
            path = (String) args;
            pdf = new File(path);
            onLayoutChangeListener = new PDFView.OnLayoutChangeListener() {
                @Override
                public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                    recycleView();
                }
            };
        }finally {
            initView();
        }
    }



    @Override
    public View getView()  {
        if(isLoading == true) {
            return textView;
        } else {
            return view;
        }
    }


    private void recycleView() {
        view.recycle();
        view.fromFile(pdf).defaultPage(0).load();
    }

    private void initView() {
            view.addOnLayoutChangeListener(onLayoutChangeListener);
            view.fromFile(pdf).defaultPage(0).onRender(onRenderListener).load();
        }

}

Yes it is prety messy but i'm a beginner ^^

Thank you for your help !

Upvotes: 0

Views: 117

Answers (1)

LinuxMasterRace
LinuxMasterRace

Reputation: 107

After settting isLoading false call invalidate(); it makes view redraw itself.

 @Override
        public View getView()  {
            if(isLoading == true) {
                return textView;
            } else {
                return view;
                invalidate();        
    }
}

Upvotes: 1

Related Questions