Announcement

Collapse
No announcement yet.

Layouts zur Laufzeit an MenuItem etc binden

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Layouts zur Laufzeit an MenuItem etc binden

    Hallo,

    fürs Studium soll in Kürze eine Einkaufszettel in Appform erstellt werden. Dazu soll zur Laufzeit neue Listen angelegt werden bzw aus der DB die Listenstruktur aufgebaut werden. -> Problem: MenuItem Struktur nicht im Vorfeld bekannt.

    Meine Idee war es den NavigationDrawer als Fundament zu nutzen. Und mittels MenuItem "Neue Liste erstellen", dann zur Laufzeit ein neues MenuItem "Liste #1" zu erstellen. Auf Klick diesen Items gelangt man auf die Listenansicht über einen Arrayadapter.

    Das erzeugen des MenuItems zur Laufzeit funktioniert. Nur ist da keine View/Layout angebunden. Und alles was ich im Internet finde setzt auf bereits bekannte Menustruktur auf. Ich weiß nicht wie man das nennt. Mir fehlt offenbar das entscheidende Keyword zum suchen. inflate?

    MainActivity
    Code:
    public class MainActivity extends AppCompatActivity {
      private AppBarConfiguration mAppBarConfiguration;
      private ActivityMainBinding binding; 
      private Menu menu;   
          private TextView mName;     private TextView mEmail;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          binding = ActivityMainBinding.inflate(getLayoutInflater());         setContentView(binding.getRoot());          setSupportActionBar(binding.appBarMain.toolbar);         binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 // Add Entry fragment                  Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                         .setAction("Action", null).show();             }         });         DrawerLayout drawer = binding.drawerLayout;         NavigationView navigationView = binding.navView;         // Passing each menu ID as a set of Ids because each         // menu should be considered as top level destinations.         mAppBarConfiguration = new AppBarConfiguration.Builder(                 R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)                 .setOpenableLayout(drawer)                 .build();         NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);         NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);         NavigationUI.setupWithNavController(navigationView, navController);           navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {             @Override             public boolean onNavigationItemSelected(@NonNull MenuItem item) {                 Menu menu = navigationView.getMenu();                 int menuSize = menu.size();                  switch(item.getItemId()){                     case R.id.menu_signOut:                         signOut();                         return true;                      case R.id.menu_addNewList:                         // Liste erstellen                         //groupId, itemId, order, text                         menu.add(R.id.menu_lists, menuSize, 0, "Test " + menuSize);                         menu.findItem(menuSize).setIcon(R.drawable.ic_list);                          Toast.makeText(MainActivity.this, "Neue Liste erstellt", Toast.LENGTH_SHORT).show();                         drawer.closeDrawers();                         return true;                 }                 return false;             }         });      }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         getMenuInflater().inflate(R.menu.main, menu);         return true;     }      @Override     public boolean onSupportNavigateUp() {         NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);         return NavigationUI.navigateUp(navController, mAppBarConfiguration)                 || super.onSupportNavigateUp();     }      private void signOut(){         FirebaseAuth.getInstance().signOut();         Intent intent = new Intent(this, LoginActivity.class);         startActivity(intent);     } }
    activity_main_drawer.xml
    Code:
    <?xml version="1.0" encoding="utf-8"?>   
     <menu xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     tools:showIn="navigation_view">       <group         android:id="@+id/menu_lists"         android:checkableBehavior="single">         <item             android:id="@+id/nav_home"             android:orderInCategory="0"             android:icon="@drawable/ic_menu_camera"             android:title="@string/menu_home" />         <item             android:id="@+id/nav_gallery"             android:orderInCategory="0"             android:icon="@drawable/ic_menu_gallery"             android:title="@string/menu_gallery" />         <item             android:id="@+id/nav_slideshow"             android:orderInCategory="0"             android:icon="@drawable/ic_menu_slideshow"             android:title="@string/menu_slideshow" />     </group>      <group android:checkableBehavior="none">         <item             android:id="@+id/menu_addNewList"             android:orderInCategory="1"             android:icon="@drawable/ic_add_list"             android:title="@string/neue_liste_erstellen" />     </group>      <group         android:id="@+id/menu_bottom"         android:checkableBehavior="none">          <item             android:id="@+id/menu_signOut"             android:orderInCategory="2"             android:icon="@drawable/ic_logout"             android:title="@string/abmelden" />     </group>  </menu>
    Der Rest müsste noch so sein, wie das NavigationDrawer-Template von AndroidStudio.
    Oft sehe ich das der Anfang der Activity so ungefähr aussieht:
    Ich weiß nicht ob diese AppBarConfiguration für meinen dynamischen Fall geeignet ist.


    Code:
     public class MainActivity extends AppCompatActivity {   
         private DrawerLayout mDrawer;     private Toolbar toolbar;     private NavigationView nvDrawer;     // Make sure to be using androidx.appcompat.app.ActionBarDrawerToggle version.     private ActionBarDrawerToggle drawerToggle;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         // Set a Toolbar to replace the ActionBar.         toolbar = (Toolbar) findViewById(R.id.toolbar);         setSupportActionBar(toolbar);         // This will display an Up icon (<-), we will replace it with hamburger later         getSupportActionBar().setDisplayHomeAsUpEnabled(true);         // Find our drawer view         mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);     }
    Wie binde ich an eine zur Laufzeit erstellte MenuItem an eine View?
    Und wie baue ich mir zur Laufzeit aus mehreren Activites und Fragmenten etc. eine neue Ansicht zusammen?
    Damit ich zum Beispiel für eine eigene Ansicht (Produktbeschreibung) das Header_Layout vom NavigationDrawer nutzen kann?

    mfg werdas34

    Wie funktioniert das richtige Anzeigen der Codeblöcke? Würde ich gerne anpassen, aber komme mit der Formatierung nicht klar..


  • #2
    Wer soll den Code lesen? Soll man sich das selber formatieren?

    https://www.java-forum.org/thema/zur...binden.195687/
    Christian

    Comment

    Working...
    X