[英]When asynctask in activity finishes how to reload ui in fragment?
我的活動加載一個片段並啟動一個AsyncTask。
class GetParkingAreasAsync extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... args) {
return mRepository.getParkingAreas(mContext.getActiveUser());
}
@Override
protected void onPostExecute(String value) {
for (int i=0; i<mContext.getActiveUser().getParkingAreas().size(); i++){
Log.i(TAG_areas, "parking area " + i +": " + mContext.getActiveUser().getParkingAreas().get(i).getName());
}
}
}
活動中的此Asynctask加載了一些數據(我存儲在上下文中)。 完成后,如何在片段中重新加載UI以顯示已加載的數據(在父Activity中)?
onPostExecute已經在UIThread中運行,因此您只需要片段即可調用Activity。 我通常這樣做的方法是為片段定義接口。 像這樣:
public interface YourFragmentListener {
void onParksLoaded(List<String> names)
}
然后在您的活動上:
public class YourActivity implements YourFragmentListener {
@Override
void onParksLoaded(List<String names) {
// Do something with the names
yourField.setText(names.get(0))
}
}
最后,您可以在片段中像這樣使用它:
@Override
protected void onPostExecute(String value) {
((YourFragmentListener) getActivity()).onParksLoaded(value)
}
當然,您可以更改類型以更好地適合您的用例。 只是要注意強制轉換,如果您在未實現YourFragmentListener的活動中使用此片段,則會拋出異常
創建片段時,您有他的一個實例,因此您可以執行onPostExecute來調用片段上的方法
@Override
protected void onPostExecute(String value) {
yourFragment.doSomething()
}
在片段中定義所需的方法以更新UI,完成異步作業后,在父活動中搜索片段並在片段實例上調用該方法
MyFragment :
public void refreshUI(String data) {
//Do something with data you receive
}
ParentActivity:
@Override
protected void onPostExecute(String value) {
//or you can find it with tag if have any
MyFragment frag = getFragmentManager().findFragmentById(R.id.container);
if(frag != null) frag.refreshUI(value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.