我正在使用Android上的Fragment上的AsyncTask
。在它的doInBackground...
它做了很多东西。但是在某些时候,布尔标志被设置为一个特定的值,并且该标志使得另一个Fragment
出现在第一个上面。添加的片段未显示
它似乎正在出现,但由于AsyncTask
仍在工作,直到它结束才显示。
这里是我的代码:
public interface OnDoStuff() {
public void doSomeStuff();
}
public void setOnDoStuff(OnDoStuff onDoStuff) {
interfacedoStuff = onDoStuff;
}
// My ASYNC CLASS
whileEnded=false;
@Override
protected MyObjectParams[] doInBackground(MyObjectParams... params) {
if (whileEnded)
publishProgress(params);
if (backgroundTimes > 10)
whileEnded = true;
if (whileEnded) publishProgress(params);
// Do some other stuff
}
@Override
protected void onProgressUpdate(MyObjectParams[]... values) {
myInterface.doSomeStuff();
}
这种沟通工作正常。碎片正在被添加。但是直到过程结束才显示出来。在这里,我附加片段:
public class FragmentShowAnimation extends Fragment {
RelativeLayout layout;
ImageView imageView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
layout = new RelativeLayout(this.getActivity());
layout.setLayoutParams(new RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
layout.setBackgroundColor(Color.parseColor("#CCCDCDCD"));
imageView = new ImageView(this.getActivity());
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
imageView.setLayoutParams(params);
imageView.setBackgroundResource(R.drawable.animated_background);
AnimationDrawable frameAnimation = (AnimationDrawable) imageView.getBackground();
if (frameAnimation != null) {
frameAnimation.start();
}
layout.addView(imageView);
return layout;
}
}
此片段显示UI上的动画层。
但似乎是如果我的片段被显示,但在AsyncTask的结尾。任何想法我做错了什么?
编辑:我忘记了我的MainActivity的过渡...在这里。
@Override
public void onDoStuff() {
getFragmentManager().beginTransaction().add(messagingLayout).commit();
}
EDIT2:附加图像,以帮助澄清我在做什么:
哪里实际片段交易代码?它何时发生? – stkent 2014-12-04 13:50:52
片段不应该与片段进行通信,特别是不要启动它们,因为它们基本上是线程中的线程。你想要做的是在第一个片段的活动上创建一个方法,使用getActivity()。startSecondFragment(yourdata)让主线程安全地启动第二个片段。片段应该始终通过父母的活动进行交流。 – 2014-12-04 13:58:00
对不起,我没有解释我自己。通信正在使用MainActivity进行。所以主要活动接收信号显示第二个片段,然后它添加它。 – Sonhja 2014-12-04 14:00:37