添加的片段未显示

时间:2014-12-04 13:38:12

标签: android

我在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 :附图以帮助澄清我正在做的事情:

enter image description here

1 个答案:

答案 0 :(得分:0)

在您onPostExecute的{​​{1}}未完成之前,您的旧片段仍会附加。我没有看到你在AsyncTask k中有它,但我认为你有。 AsyncTas的{​​{1}}方法完成后,您想要的转换正在进行。

试试这个:

分离当前片段(在AsyncTask中)并通过调用FragmentManager并提交新片段将其替换为另一片段。在OnPostExecute的某个点执行此操作的方法只是返回此布尔值,并让OnPostExecute完成此过程。

遵循DoInBackground的指南并实施所有相关方法(其中4个是准确的)是一个很好的实践