I have an activity that can show two different layouts. Both of the layouts are pre-defined (XML). Basically, if a condition is met, then layout A should be displayed. If the condition fails, then layout B should be displayed.
Layout A is a simplistic Linear Layout - it's my main "form", so to speak. Layout B is a simplistic Relative Layout - it's a placeholder until some data can be downloaded. Once the data is downloaded (and a notification is sent), then I want to remove Layout B and display Layout A.
I've tried calling the invalidate()
method on Layout B in the onResume()
method of my Activity
but that doesn't work.
I'm not sure what approach I should take, in (1) where to "correctly" switch the layouts, and (2) how I should go about displaying it. I'm assuming I need to inflate Layout A when my condition is met, but I'm not 100% sure about that.
Edit:
Snipped of my onCreate()
method:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutA); // will happen 99% of the time
...
if (!dbHelper.tableIsPopulated()) {
setContentView(R.layout.layoutB); // show placeholder bc no data exists
getData();
}
}
Unless you have a reason to not use a background
Thread
, I suggest using anAsyncTask
and using a progress bar. It will be less costly than using a dummyLayout
just as a placeholder until you get the data. And you said it won't be used but 1% of the time. Seems like a waste in my opinionYou apparently know about
AsyncTask
but Here are the Docs for future visitors and it has an example of using theProgressDialog
.Note
Since it isn't an inner class you will just need to pass your
Context
to the constructor of yourAsyncTask
if you are going to show yourProgressDialog
from there.Here is a link to a similar question Inflate a view / layout into another layout? and there is a possible solution there