我有一个内部AsyncTask,我从包含此AsyncTask的片段外部的片段调用。我已经阅读并看到了一些使用界面的例子。我无法弄清楚如何在我的项目中实现它。
这是我内心的AsyncTask:
public class LoadQueueTask extends AsyncTask<Void, Void, Queue>
{
@Override
protected Queue doInBackground(Void... arg0) {
Model model = Model.getInstance();
return model.getQueue();
}
@Override
protected void onPostExecute(Queue result) {
super.onPostExecute(result);
queue = result;
if(result == null) {
listview.setEmptyView(empty);
progress.setVisibility(View.GONE);
listview.setVisibility(View.VISIBLE);
emptyText.setText("Empty Queue");
emptyImage.setImageResource(R.drawable.ic_action_warning);
} else {
if(result.getSlots().size() != 0) {
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
callAsynchronousTask();
}
}, 5000);
} else {
listview.setEmptyView(empty);
progress.setVisibility(View.GONE);
listview.setVisibility(View.VISIBLE);
emptyText.setText("No items found");
}
}
}
}
这是我想要执行此任务的片段:
public class Fragment extends SherlockFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment, container, false);
}
ViewPager mViewPager = (ViewPager) rootView.findViewById(R.id.viewPager);
kbps = (TextView) rootView.findViewById(R.id.speed);
refresh = (ImageView) rootView.findViewById(R.id.refresh);
refresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//CALL ASYNCTASK HERE
}
});
return rootView;
}
答案 0 :(得分:0)
您可以将分离的邮件系统用作EventBus或Otto。 第一个片段是发布者和第二个订阅者。在后者中,您将启动AsyncTask。
稍后,只要您需要将对象从一个组件发送到另一个组件,就可以在应用程序的任何位置使用该系统。
答案 1 :(得分:0)
只需将AsyncTask移动到自己的公共类中,您就可以从任何地方调用它。有一个回调接口,并在你调用AsyncTask的片段中实现它。
答案 2 :(得分:0)
为Fragment类创建一个接口
public interface OnFragmentButtonListener{
onMyButtonClicked();
}
现在,让托管这些片段的活动实现此接口。
在OnClick方法中,进行该调用
((OnFragmentButtonListener)getActivity()).onMyButtonClicked();
接下来在托管AsyncTask内部类的Fragment类中创建一个方法。
public void startAsyncTask(){
new LoadQueueTask.execute();
}
在活动中,你被迫在onMyButtonClicked()上实现你的接口方法; 在此方法中,获取片段的句柄并调用片段中的startAsyncTask方法。