Отображение активности перекрывается Фрагмент при изменении ориентации - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю приложение, которое переключается между фрагментами и действиями, используя навигационный ящик.

Я могу переключаться между операцией (которая содержит пустое представление или представление повторного окна) и фрагментами, используя навигационную панель, но когда я изменяю ориентацию, когда фрагмент загружен и операция скрыта от просмотра (пустое представление или представление повторного использования),макет действия будет перекрывать фрагмент при его восстановлении после изменения ориентации.Пустое / вторичное представление больше не скрыто.Я хотел бы, чтобы фрагмент оставался загруженным, а макет активности оставался скрытым после изменения ориентации.Я пробовал if (savedInstanceState == null), но это не сработало.

Вот мой код.Любая помощь будет оценена, чтобы помочь решить эту проблему.

     public class DisplayActivity extends AppCompatActivity implements    
     LoaderManager.LoaderCallbacks<Cursor>, 
      NavigationView.OnNavigationItemSelectedListener,DefinitionFragment.OnFragmentInteractionListener,WeatherFragment.OnFragmentInteractionListener,PlanetFragment.OnFragmentInteractionListener{

    private static final int ASTRONOMY_LOADER = 0;
    private CustomCursorAdapter mAdapter;
    RecyclerView mRecyclerView;
    ViewGroup emptyView;
    private Fragment fragment;
    private FragmentTransaction fragmentTransaction;
    private FloatingActionButton fab;
    private static final  String TAG = "Fragment";




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        if (savedInstanceState == null){
                fab.hide();
                mRecyclerView.setVisibility(View.GONE);
                emptyView.setVisibility(View.GONE);


            }

            fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(DisplayActivity.this, EditorActivity.class);
                    startActivity(intent);
                }
            });

            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.addDrawerListener(toggle);
            toggle.syncState();

            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);


            mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            emptyView = findViewById(R.id.empty_view);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
            mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL));


            //Setup an Adapter to create the recycler items for each row of prescription data in the Cursor.
            //There is no prescription data yet (until the loader finishes) so pass in null for the Cursor.
            mAdapter = new CustomCursorAdapter(this);
            mRecyclerView.setAdapter(mAdapter);

            //Kick off the loader
            getLoaderManager().initLoader(ASTRONOMY_LOADER, null, this);




        }



    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_display, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // User clicked on a menu option in the app bar overflow menu
        switch (item.getItemId()) {
            // Respond to a click on the "Delete all entries" menu option
            case R.id.action_delete_all_entries:
                deleteAllCalculations();
                return true;

        }

        return super.onOptionsItemSelected(item);
    }

     @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
        fragmentTransaction = getSupportFragmentManager().beginTransaction();

        if (id == R.id.astronomyCalculations) {
            if(fragment!=null) {
                fragmentTransaction.remove(getSupportFragmentManager().findFragmentById(R.id.frame_layout));
                fragmentTransaction.commit();
                fab.show();
                if (mAdapter.getItemCount() == 0) {
                    mRecyclerView.setVisibility(View.GONE);
                    emptyView.setVisibility(View.VISIBLE);
                } else {
                    mRecyclerView.setVisibility(View.VISIBLE);
                    emptyView.setVisibility(View.GONE);

                }
            }

        } else if (id == R.id.definition) {
            // Handle the definition fragment
            fragment = new DefinitionFragment();
            if (fragment != null) {
                fragmentTransaction.replace(R.id.frame_layout, fragment);
                fragmentTransaction.commit();
                fab.hide();
                mRecyclerView.setVisibility(View.GONE);
                emptyView.setVisibility(View.GONE);

            }
}

1 Ответ

0 голосов
/ 17 февраля 2019

Мне удалось решить эту проблему.Все, что мне нужно было сделать, это зайти в androidmanifest и добавить:

android:configChanges="orientation|screenSize|keyboardHidden 

в разделе действий.Это предотвращает перезапуск активности, что я и хотел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...