2014-12-04 4 views
0

Я работаю с 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: Прикрепленный изображение, чтобы помочь прояснить, что я делаю:

enter image description here

+0

Где находится фактический фрагмент кода транзакции? Когда это происходит? – stkent

+0

Фрагменты не должны связываться с фрагментами, особенно не запускать их, поскольку они являются, по существу, потоками в потоках. То, что вы хотите сделать, это создать метод для действия, запускающего первый фрагмент, использовать getActivity(). StartSecondFragment (yourdata), чтобы основной поток начал безопасный запуск второго фрагмента. Фрагменты должны всегда связываться через их родительскую деятельность. –

+0

Извините, я сам не объяснил. Общение происходит с помощью MainActivity. Таким образом, основная активность получает сигнал для отображения второго фрагмента, а затем добавляет его. – Sonhja

ответ

0

Ваш старый фрагмент еще прилагается до onPostExecute вашего AsyncTask не не закончена. Я не вижу, что у вас это есть в вашем AsyncTas k, но я предполагаю, что у вас есть. После завершения метода AsyncTaskOnPostExecute выполняется переход, который вы хотите.

Попробуйте это:

Отделить ваш текущий фрагмент (в OnPostExecute) и заменить его другим, вызвав FragmentManager и совершали новый фрагмент. Способ сделать это в определенной точке DoInBackground - это просто вернуть это логическое значение и позволить OnPostExecute завершить этот процесс.

Также это хороший pratice следовать guideliness для AsyncTask и реализовать все соответствующие методы (4 из них, чтобы быть точным)

+0

Но я хочу, чтобы оба фрагмента сосуществовали в одной временной шкале. Я делаю то же самое в других проектах, но для этого конкретного не работает ... – Sonhja

Смежные вопросы