Реализуйте переключение между фрагментами без потери предыдущего содержимого - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь следовать руководству, опубликованному в первом ответе @ Har sh Ganatra здесь , но я не понимаю, как реализовать часть xml. Это мое действие:

public class MainActivity extends AppCompatActivity {

    private int counter=0;
    public static int currentIndex = 0;
    private int currentApiVersion;

    CustomViewPager viewPager;
    ViewPagerAdapter adapter;

    private void loadFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();
        transaction.replace(R.id.fragment_container, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

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

        adapter = new ViewPagerAdapter (MainActivity.this.getSupportFragmentManager());
        adapter.addFragment(new HomeFragment(), "HOME");
        adapter.addFragment(new PopularFragment(), "POPULAR");
        adapter.addFragment(new PlayingFragment(), "PLAYING");

        if(isNetworkAvailable()) viewPager.setCurrentItem(currentIndex);
        else loadFragment(new NetworkNotAvailable());

        viewPager = (CustomViewPager) findViewById(R.id.viewpager1);
        viewPager.setAdapter(adapter);

        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.BottomNavigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            Fragment fragment;
            switch (item.getItemId()) {
                case R.id.bbn_item1:
                    onResume();
                    currentIndex=0;
                    viewPager.setCurrentItem(currentIndex);
                    return true;

                case R.id.bbn_item2:
                    currentIndex=1;
                    viewPager.setCurrentItem(currentIndex);
                    return true;

                case R.id.bbn_item3:
                    currentIndex=2;
                    viewPager.setCurrentItem(currentIndex);
                    return true;
            }
            return false;
        }
    };


    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        ApiService apiService = ApiBuilder.getClient(MainActivity.this).create(ApiService.class);
        @Override
        public void onReceive(Context context, Intent intent) {
            counter+=1;
            Call<MovieResponse> call = apiService.getPopular(Values.CATEGORY[0],BuildConfig.API_KEY,Values.LANGUAGE,counter);
            call.enqueue(new Callback<MovieResponse>() {
                @Override
                public void onResponse(Call<MovieResponse>call, Response<MovieResponse> response) {
                    final List<MovieModel> movies = response.body().getResults();
                    final RecyclerView recyclerView = findViewById(R.id.rc_view);
                    if (recyclerView !=null){
                        recyclerView.setAdapter(new MoviesAdapter(movies, R.layout.content_main, getApplicationContext()));
                    }
                }

                @Override
                public void onFailure(Call<MovieResponse>call, Throwable t) { }
            });
        }
    };


    @Override
    protected void onStart() {
        super.onStart();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.lab.movietime.Service");
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
    }

    @Override
    protected void onPause() {
        super.onPause();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.lab.movietime.Service");
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter);
    }

    public boolean isNetworkAvailable() {
        try{
            ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = null;
            if(manager != null){
                networkInfo = manager.getActiveNetworkInfo();
            }
            return networkInfo != null && networkInfo.isConnected();
        }catch (NullPointerException e) {
            return false;
        }
    }

    @Override
    public void onBackPressed() { }
}

Это макет xml основного упражнения, в котором я реализовал (наверняка неправильно) 1006 * CustomViewPager (до этого был только включают ). Это макет включения, который содержит FrameLAyout, где представлены мои три фрагмента:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/grey"
    android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ll1"
            android:orientation="vertical">
                <ImageView
                    android:layout_width="@dimen/_80sdp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_marginTop="@dimen/_10sdp"
                    android:background="@drawable/logoss"
                    android:layout_gravity="center"/>

        </LinearLayout>
        <FrameLayout
            android:layout_below="@+id/ll1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/fragment_container"
            android:layout_above="@id/bottombar"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

        </FrameLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:id="@+id/bottombar"
            android:background="@color/dark"
            android:orientation="vertical">
                <com.google.android.material.bottomnavigation.BottomNavigationView
                    android:id="@+id/BottomNavigation"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginBottom="@dimen/_5sdp"
                    android:layout_gravity="bottom"
                    app:itemBackground="@color/dark"
                    android:foreground="?attr/selectableItemBackground"
                    app:itemTextColor="@animator/bottom_nav_color"
                    app:itemIconTint="@animator/bottom_nav_color"
                    app:menu="@menu/bottombar_menu_4items"/>

        </LinearLayout>
</RelativeLayout>

Где я должен настроить CustomPageViewer?

...