Как любопытно говорит, что вы не хотите передавать фрагменты (у них есть «ссылка» на действие, которое является контекстом, а передача контекста - baaad)
Вы хотите передать небольшой объект, который может помочь вам перезвонить из вашей Задачи в ваш Фрагмент.
Я бы тоже использовал интерфейс. Вот мой пример:
Фрагмент:
public class LoginFragment extends Fragment implements OnClickListener, OnLoginListener{
Button loginButton;
TextView loginErrorMsg;
private ProgressDialog progressDialog;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
progressDialog = new ProgressDialog(activity);
progressDialog.setMessage("Logging in...");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_login, container, false);
loginButton = v.findViewById(R.id.button);
loginButton.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button:
Log.v("LoginF", "onclick");
progressDialog.show();
LoginTask loginTask = new LoginTask(this);
loginTask.execute();
break;
default:
break;
}
}
@Override
public void onLoginSuccess() {
progressDialog.dismiss();
// Yayy
}
@Override
public void onLoginFailure() {
progressDialog.dismiss();
// Boo
}
}
ASyncTask:
public class LoginTask extends AsyncTask<String, Void, Integer> {
private final OnLoginListener listener;
public interface OnLoginListener{
public void onLoginSuccess();
public void onLoginFailure();
}
public LoginTask(OnLoginListener listener) {
this.listener = listener;
}
@Override
protected Integer doInBackground(String... params) {
try{
// Something
} catch (SomeException e){
listener.onLoginFailure();
}
return null;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
listener.onLoginSuccess();
}
}
Если вы разберетесь с интерфейсами, ваш мир откроется, и ваш код будет выглядеть не так, как джунгли амазонки, а скорее как хорошо организованный сад; -)