Reputation: 681
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
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