Я работаю с 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;
}
}
Этот фрагмент показывает анимированный слой над пользовательским интерфейсом.
Но кажется, что если мой фрагмент отображается, но в конце AsyncTask. Любая идея, что я делаю неправильно?
EDIT: Я забыл переход на мою MainActivity ... Вот он.
@Override
public void onDoStuff() {
getFragmentManager().beginTransaction().add(messagingLayout).commit();
}
EDIT2: Прикрепленный изображение, чтобы помочь прояснить, что я делаю:
Где находится фактический фрагмент кода транзакции? Когда это происходит? – stkent
Фрагменты не должны связываться с фрагментами, особенно не запускать их, поскольку они являются, по существу, потоками в потоках. То, что вы хотите сделать, это создать метод для действия, запускающего первый фрагмент, использовать getActivity(). StartSecondFragment (yourdata), чтобы основной поток начал безопасный запуск второго фрагмента. Фрагменты должны всегда связываться через их родительскую деятельность. –
Извините, я сам не объяснил. Общение происходит с помощью MainActivity. Таким образом, основная активность получает сигнал для отображения второго фрагмента, а затем добавляет его. – Sonhja