【发布时间】:2017-11-10 18:02:16
【问题描述】:
在一个片段中,我想阻止用户在异步任务未完成时启动另一个任务。
所以我有一个全局变量(计数器),我用它来向片段发送一个值。异步任务启动,每秒钟 onProgressUpdate 调用方法 (setVal) 将计数器的值发送到片段。我收到片段中的计数器。它具有正确的值,但每次我尝试在按钮 btn1 中访问它时,它的值始终为 0。
这是为什么呢?做我想做的事的正确方法是什么?
片段:
public class Frag1 extends android.app.Fragment {
private static TextView txt;
private static View view;
private int counter;
public Frag1() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = null;
view = inflater.inflate(R.layout.fragment_frag1, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
txt = (TextView) getActivity().findViewById(R.id.txt);
Button btn = (Button) getActivity().findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.i("Frag1","val: "+counter);
if(counter > 0) return;
FragmentTransaction ft = getFragmentManager().beginTransaction();
Frag2 f2 = new Frag2();
ft.replace(R.id.content_frame, f2);
ft.addToBackStack("f2");
ft.commit();
}
});
Button btn2 = (Button) getActivity().findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AsyncCounter ac = new AsyncCounter(counter);
ac.execute();
}
});
}
void setVal(int i){
counter = i;
}
}
异步任务:
class AsyncCounter extends AsyncTask<Void, Integer, Void> {
private int cnt;
private Frag1 f1 = new Frag1();
public AsyncCounter(int counter) {
cnt = counter;
}
@Override
protected Void doInBackground(Void... params) {
for(int i=0;i<60;i++){
publishProgress(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
Log.i("ASYNC TASK","val: "+values[0]);
cnt = values[0];
f1.setVal(cnt);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
}
【问题讨论】:
-
Frag1 f1 = new Frag1();在您的 AsyncTask 中不起作用 -
你为什么这么说?异步任务正在传回正确的值。但是变量的值还是0。
标签: java android android-fragments android-asynctask