-1
私はこのクラスをうまく使っていますが、情報を受け取る必要がある部分の名前を入れているので... しかし、このクラスは複数のフラグメントから呼び出されるので、名前を渡す必要がありますパラメータを渡す方法とそれを受け取る方法はわかりません。フラグメントの名前をAsynctaskクラスに渡すにはどうすればいいですか?
これは私の非同期クラスです
public class AsyncFragment extends AsyncTask<String, Void, String> {
SubirFotos container;
public AsyncFragment(SubirFotos f) {
this.container = f;
}
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(3000); // This takes 3 seconds
}catch(Exception ex) {}
return "DNI activo "+params[0]+ " " + params[1];
}
@Override
protected void onPreExecute() {
super.onPreExecute();
container.showProgressBar();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// The activity can be null if it is thrown out by Android while task is running!
if(container!=null && container.getActivity()!=null) {
container.populateResult(result);
container.hideProgressBar();
this.container = null;
}
}
}
これは、フラグメント名または参照を渡してはいけません、私の断片
public class SubirFotos extends Fragment {
private String userDNI;
private TextView textView;
View view;
String mResult;
AsyncFragment mTask;
public SubirFotos() {}
//El Fragment ha sido creado
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view= inflater.inflate(R.layout.fragment_subirfotos, container, false);
// on configuration changes (screen rotation) we want fragment member variables to preserved
setRetainInstance(true);
return view;
}
//La vista de layout ha sido creada y ya está disponible
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
//La vista ha sido creada y cualquier configuración guardada está cargada
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
}
//El Activity que contiene el Fragment ha terminado su creación
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
userDNI = bundle.getString("userdni");
textView =(TextView)getView().findViewById(R.id.textView);
ejecutarAsync(userDNI);
if(isTaskRunning(mTask)) {
showProgressBar();
}else {
hideProgressBar();
}
if(mResult!=null) {
populateResult(mResult);
}
super.onActivityCreated(savedInstanceState);
}
//El Fragment ha sido quitado de su Activity y ya no está disponible
@Override
public void onDetach() {
super.onDetach();
}
protected void ejecutarAsync(String dato) {
mTask = new AsyncFragment(this);
mTask.execute(dato);
}
public void showProgressBar() {
TextView resultView = (TextView)getActivity().findViewById(R.id.textUrlContent);
resultView.setVisibility(View.GONE);
ProgressBar progress = (ProgressBar)getActivity().findViewById(R.id.progressBarFetch);
progress.setVisibility(View.VISIBLE);
progress.setIndeterminate(true);
}
public void hideProgressBar() {
TextView resultView = (TextView)getActivity().findViewById(R.id.textUrlContent);
resultView.setVisibility(View.VISIBLE);
ProgressBar progress = (ProgressBar)getActivity().findViewById(R.id.progressBarFetch);
progress.setVisibility(View.GONE);
}
public void populateResult(String s) {
TextView resultView = (TextView)getActivity().findViewById(R.id.textUrlContent);
resultView.setText(s);
}
protected boolean isTaskRunning(AsyncFragment task) {
if(task==null) {
return false;
} else if(task.getStatus() == AsyncFragment.Status.FINISHED){
return false;
} else {
return true;
}
}
}
なぜそれをコンストラクタに渡さないのですか? – Shaishav