Ich habe ein Schubladenlayout, das ein Menü enthält, und habe den ersten Menüeintrag als den standardmäßig ausgewählten Eintrag in meiner Datei mainActivity.java festgelegt. Nachdem ich das getan habe, habe ich Code geschrieben, der eine int-Variable mit dem Namen previousItem verwendet, um den zuvor überprüften Menüeintrag als überprüfter Eintrag entfernen zu können und den neu ausgewählten Menüpunkt als überprüften zu setzen. Ich bekomme jedoch weiterhin eine IndexOutOfBounds Exception und ich weiß nicht, wie ich eine Lösung für dieses Problem finden kann. Ich poste meine mainActivity.java Datei und das Protokoll:Aktivieren und Deaktivieren von Elementen im Menü "Schublade"
public class MainActivity extends AppCompatActivity {
int previousItem;
// Declaring our dialog
ImportantDialogFragment dialogFragment = new ImportantDialogFragment();
GridView gridView;
// NavMenu member vars
private DrawerLayout mDrawerLayout;
private NavigationView navigationView;
private ActionBarDrawerToggle mToggle; // Button for toggling the side menu
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Showing the disclaimer dialog every time the app starts
dialogFragment.show(getSupportFragmentManager(),"IMPORTANT_NOTICE");
// Get Screen Size Details
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
final int width = displayMetrics.widthPixels;
gridView = (GridView) findViewById(R.id.gridViewLayout);
gridView.setAdapter(new ImageAdapter(this)); // used to set the contents of the GridView-in this case images-
// When an item from the GridView gets clicked
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Create a new Intent...
Toast.makeText(MainActivity.this, "Position: " + position, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,CardViewActivity.class);
intent.putExtra("Card Index",position);
intent.putExtra("SCREEN_WIDTH",width);
startActivity(intent);
}
});
mToolbar = (Toolbar) findViewById(R.id.navActionBar);
setSupportActionBar(mToolbar); // check quick doq
getSupportActionBar().setDisplayShowTitleEnabled(false);
mToolbar.setTitle("");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.string.drawer_open,R.string.drawer_closed); // Instantiating our button
navigationView = (NavigationView) findViewById(R.id.nav_view);
// Sets the default selected menu item, to the Home item
navigationView.getMenu().findItem(R.id.nav_home).setChecked(true);
previousItem = navigationView.getMenu().getItem(0).getItemId();
// When an item inside the NavView gets clicked, then handle the event...
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
mDrawerLayout.closeDrawer(Gravity.START);
break;
case R.id.nav_UserBoxGLB:
// USERBOX GLB ACTIVITY
Intent userBoxGLBintent = new Intent(MainActivity.this,UserBoxGLBActivity.class);
startActivity(userBoxGLBintent);
break;
case R.id.nav_UserBoxJP:
break;
case R.id.nav_settings:
break;
case R.id.nav_feedback:
break;
case R.id.nav_contact_us:
break;
case R.id.nav_donate:
// Open the website's URL in a browser window
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse("http://www.google.com"));
startActivity(intent);
break;
case R.id.nav_about:
break;
default:
return onNavigationItemSelected(item);
}
navigationView.getMenu().getItem(previousItem).setChecked(false);
item.setChecked(true);
previousItem = navigationView.getMenu().findItem(item.getItemId()).getItemId();
mDrawerLayout.closeDrawers();
return false;
}
});
mDrawerLayout.addDrawerListener(mToggle);
mToggle.syncState();
}
// When an item from the Action Bar gets tapped, then...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(mToggle.onOptionsItemSelected(item)) {
return true;
}
return onOptionsItemSelected(item);
}
}
Ausnahme:
11-21 14:27:45.553 19074-19074/com.dcv.spdesigns.dokkancards E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dcv.spdesigns.dokkancards, PID: 19074
java.lang.IndexOutOfBoundsException: Index: 2131230840, Size: 5
at java.util.ArrayList.get(ArrayList.java:411)
at android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:741)
at com.dcv.spdesigns.dokkancards.MainActivity$2.onNavigationItemSelected(MainActivity.java:122)
at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:154)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:342)
at android.view.View.performClick(View.java:6261)
at android.view.View$PerformClick.run(View.java:23748)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Ich verstehe nicht wirklich die Antwort, es ist zu kurz und doesn‘ Ich erkläre viel. Mit welchen Gegenständen beginnen Sie? –
In Ihrer onNavigationItemSelected() sollten Sie die Position des Elements mit 'previousItem = items.indexOf (menuItem) 'speichern. – dalla92
Sorry, aber ich hatte nicht den Verweis-Link auf der Unterseite. Das hat es gelöst, vielen Dank! –