问题
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();
}
}
回答1:
Unless you have a reason to not use a background Thread
, I suggest using an AsyncTask
and using a progress bar. It will be less costly than using a dummy Layout
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 opinion
public class TalkToServer extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(String... params) {
//do your work here
return something;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// do something with data here-display it or send to mainactivity
}
You apparently know about AsyncTask
but Here are the Docs for future visitors and it has an example of using the ProgressDialog
.
Note
Since it isn't an inner class you will just need to pass your Context
to the constructor of your AsyncTask
if you are going to show your ProgressDialog
from there.
来源:https://stackoverflow.com/questions/15260855/one-activity-two-views-how-and-where-do-i-inflate-the-second-view