我的活动加载一个片段并启动一个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());
}
}
}
Activity中的Asynctask加载了一些数据(我存储在上下文中)。完成后如何重新加载片段中的UI以显示加载的数据(在父Activity中)?
答案 0 :(得分:1)
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的活动中使用这个片段就会抛出异常
答案 1 :(得分:0)
当你创建片段时,你有一个他的实例 所以你可以做的是onPostExecute来调用片段上的方法
@Override
protected void onPostExecute(String value) {
yourFragment.doSomething()
}
答案 2 :(得分:0)
在片段中定义所需方法以更新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);
}