0
  • I am developing an app on android studio (Java)
  • I have created a tabLayout that swipes between two fragments using a viewPager2 + Fragment State Adapter
  • On fragment02, I have animated a textView.
  • When I swipe onto the fragment the animation plays on loop, as it should.
  • However, if I swipe off the fragment and then back on, the animation is no longer playing.
  • I really need the animation to continue.

Any advice is welcome and I thank you in advance :)

Please be aware I am rather new to this.

// MainActivity.java

package Zoomie.App;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getSupportActionBar().setTitle("Welcome");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        ViewPager2 viewPager2 = findViewById(R.id.ViewPager);
        viewPager2.setAdapter(new FragmentPagerAdapter(this));

        TabLayout tabLayout = findViewById(R.id.tabLayout);
        TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(
                tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {

            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {

                switch (position) {
                    case 0: {
                        tab.setText("Fragment 01");
                        break;
                    }
                    default: {
                        tab.setText("Fragment 02");
                        break;
                    }
                }
            }
        });
        
        tabLayoutMediator.attach();
    }
}

// FragmentPagerAdapter.java

package Zoomie.App;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;

public class FragmentPagerAdapter extends FragmentStateAdapter {

    public FragmentPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position){
            case 0:
                return new Fragment01();
            default:
                return new Fragment02();
        }
    }

    @Override
    public int getItemCount() {
        return 2;
    }
}

// Fragment02.java 

package Zoomie.App;

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class Fragment02 extends Fragment {

    public Fragment02() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView=inflater.inflate(R.layout.fragment_02, container, false);

        TextView fade01 = (TextView) rootView.findViewById(R.id.textView_fade_01);
        Animation fade = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_animation);
        fade01.startAnimation(fade);

        return rootView;
    }
}

// fade_animation.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha
        android:fromAlpha="0"
        android:toAlpha=".5"
        android:duration="375"
        android:repeatMode="reverse"
        android:repeatCount="infinite"
        />
        
</set>
Chaos
  • 11
  • 2

1 Answers1

0

You should move the loading animation method into onResume() lifecycle method. In your case:

private TextView fade01;

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container,
                         Bundle savedInstanceState
) {

    View rootView = inflater.inflate(R.layout.fragment_02, container, false);

    fade01 = (TextView) rootView.findViewById(R.id.textView_fade_01);

    return rootView;
}

@Override
public void onResume() {
    super.onResume();
    Animation fade = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_animation);
    fade01.startAnimation(fade);
}
Gent
  • 6,215
  • 1
  • 37
  • 40