抽屉行为两次。是什么导致的?

时间:2016-12-22 12:14:28

标签: android

我试图在没有连接的情况下创建一个AlertDialog,但它显示了两次。

经过两天的实验,我发现这是因为我在case块中的main_activity完成了两次。这段代码来自我在网上找到的教程之一(SimpleNotePad或smth)。那是main_activity:

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

    mToolbar = (Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); //remove this line in the MainActivity.java

    DatabaseHelper databaseHelper = new DatabaseHelper(this);
    databaseHelper.getWritableDatabase();

    result = new DrawerBuilder()
            .withActivity(this)
            .withToolbar(mToolbar)
            .withActionBarDrawerToggle(true)
            .addDrawerItems(
                    new PrimaryDrawerItem().withName(R.string.title_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),
                    new PrimaryDrawerItem().withName(R.string.title_editor).withIcon(FontAwesome.Icon.faw_edit).withIdentifier(2),
                    new PrimaryDrawerItem().withName(R.string.title_settings).withIcon(FontAwesome.Icon.faw_list).withIdentifier(3)

            )
            .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                @Override
                public boolean onItemClick(View view, int i, IDrawerItem drawerItem) {
                    if (drawerItem != null && drawerItem instanceof Nameable){
                        String name = ((Nameable)drawerItem).getName().getText(MainActivity.this);
                        mToolbar.setTitle(name);
                    }

                    if (drawerItem != null){
                        int selectedScren = drawerItem.getIdentifier();
                        switch (selectedScren){
                            case 1:
                                //go to List of Notes
                                openFragment(new NoteListFragment(), "Notes");
                                break;
                            case 2:
                                //go the editor screen
                                startActivity(new Intent(MainActivity.this, NoteEditorActivity.class));
                            case 3:
                                //go to settings screen, yet to be added
                                //this will be your home work
                                Toast.makeText(MainActivity.this, "Settings Clicked", Toast.LENGTH_SHORT).show();
                                break;
                        }
                    }
                    return false;
                }


            })
            .withOnDrawerListener(new Drawer.OnDrawerListener() {
                @Override
                public void onDrawerOpened(View view) {
                    KeyboardUtil.hideKeyboard(MainActivity.this);

                }

                @Override
                public void onDrawerClosed(View view) {

                }

                @Override
                public void onDrawerSlide(View view, float v) {

                }
            })
            .withFireOnInitialOnClick(true)
            .withSavedInstance(savedInstanceState)
            .build();
    if (savedInstanceState == null){
        result.setSelection(1);
    }


}

@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_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

private void openFragment(final Fragment fragment, String title){
    getSupportFragmentManager()
            .beginTransaction()
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .replace(R.id.container, fragment)
            .addToBackStack(null)
            .commit();
    getSupportActionBar().setTitle(title);
}

我试图通过在案例1中执行此操作来限制片段创建:

fragment =  (NoteListFragment)getSupportFragmentManager().findFragmentByTag(String.valueOf(1));
                                if (fragment == null){
                                    fragment = new NoteListFragment();
                                    promptForDelete(fragment.toString());
                                    openFragment(fragment, "Notes");
                                }
                                //do nothing
                                break;

在案例块添加此

之后
if (fragment != null) {
                                FragmentManager fm = getSupportFragmentManager();
                                fm.beginTransaction().replace(R.id.container, fragment, String.valueOf(1)).commitAllowingStateLoss();
                            }

但没有成功。是什么迫使main_activity创建两次?我怎么能改变它?

0 个答案:

没有答案