我试图在没有连接的情况下创建一个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创建两次?我怎么能改变它?