我正在使用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