【发布时间】:2017-01-20 06:55:58
【问题描述】:
我有这个类可以正常工作,但是因为我把片段的名称放在了我需要接收信息的地方...... 但是这个类会从多个片段中调用,所以我需要将名称作为参数传递,但我不知道如何传递它以及如何接收它。
这是我的异步类
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;
}
}
}
【问题讨论】:
-
为什么不在构造函数中传递呢?
标签: java android android-asynctask fragment parameter-passing