活动显示重叠方向更改时的片段

问题描述 投票:0回答:1

我正在制作一个应用程序,使用导航抽屉在片段和活动之间进行更改。

我可以使用导航抽屉在活动(包含空视图或者回收视图)和片段之间切换,但是当我在加载片段时更改方向并从视图中隐藏活动(空视图或者回收视图)时,活动布局将重叠在方向改变后恢复时的片段。 emptyview / recyclerview不再隐藏。我想要的是片段保持加载状态,活动布局在方向改变后保持隐藏状态。我尝试过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);

            }
}
android android-fragments navigation-drawer device-orientation
1个回答
0
投票

我能够解决这个问题。我所要做的就是进入androidmanifest并添加:

android:configChanges="orientation|screenSize|keyboardHidden 

在活动部分。它可以防止活动重启,这是我想要的。

© www.soinside.com 2019 - 2024. All rights reserved.