0

Haftungsausschluss: Dies ist die erste App, die ich baue, so lerne ich die harte Art, Fragmente zuerst zu verwenden, so dass mein Code überall ist.Menüelement Klicken Sie in eine Navigationsleiste Absicht Aktivität hostet ein Fragment

Ich habe Menüelemente in einer Navigationsansicht, die geladen werden, aber die Menüelementklicks funktionieren nicht. Es stürzt nicht ab, starrt mich nur an. Ich möchte eine Absicht verwenden, um ein Fragment anzuzeigen, und ich bin vom Ändern und Versuchen so vieler verschiedener Optionen verloren.

XML FÜR NAV FACH & Menüpunkte:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/activity_pageone" 
    android:background="@drawable/rygg" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbarThumbVertical="@color/primary_dark_color" 
    tools:openDrawer="start" 
    tools:context="com.android.nohiccupsbeta.pageone"> 

    <FrameLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/fragmentContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <android.support.design.widget.NavigationView 
      android:id="@+id/navigation_header_container" 
      app:headerLayout="@layout/header" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      app:itemIconTint="@color/category_vodka" 
      app:itemTextColor="@color/primary_dark_color" 
      app:menu="@menu/drawermenu" 
      android:layout_gravity="start" > 

     </android.support.design.widget.NavigationView> 
    </FrameLayout> 

</android.support.v4.widget.DrawerLayout> 

JAVA: 

public class pageone extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 
    DrawerLayout mDrawerLayout; 
    ActionBarDrawerToggle mToggle; 

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

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mToggle.onConfigurationChanged(newConfig); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu){ 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.drawermenu, menu); 
     return true; 
    } 
    /** 
    * 
    * @param item For the hamburger button 
    * @return 
    */ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (mToggle.onOptionsItemSelected(item)){ 
      return true; 
     } 
     switch (item.getItemId()) { 
      case R.id.itemWhiskey: 
       Intent whiskeyIntent = new Intent(pageone.this, whiskeyActivity.class); 
       startActivity(whiskeyIntent); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    /** 
    * Make sure the drawer open and closes in sync with UI visual 
    * @param savedInstanceState 
    */ 
    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mToggle.syncState(); 
    } 

    /** 
    * Function to make sure all the drawer open & closes properly 
    */ 
    public void setupDrawer() { 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.activity_pageone); 
     mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_closed) { 
      @Override 
      public void onDrawerClosed(View closeView) { 
       Toast.makeText(pageone.this, "Happy You Learned", Toast.LENGTH_SHORT).show(); 
       super.onDrawerClosed(closeView); 
       invalidateOptionsMenu(); 
      } 
      @Override 
      public void onDrawerOpened(View openView) { 
       Toast.makeText(pageone.this, "Effects Of Alcohol", Toast.LENGTH_SHORT).show(); 
       super.onDrawerOpened(openView); 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.addDrawerListener(mToggle); 
    } 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     MenuItem itemWhiskey = (MenuItem) findViewById(R.id.itemWhiskey); 
     itemWhiskey.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem itemWhiskey) { 
       FragmentManager fm = getSupportFragmentManager(); 
       Fragment effectsFragment = fm.findFragmentById(R.id.frame_container2); 
       if (effectsFragment == null) { 
        effectsFragment = new WhiskeyFragment(); 
        fm.beginTransaction().add(R.id.frame_container2, effectsFragment).commit(); 
        getSupportActionBar().setTitle("Whiskey"); 
        itemWhiskey.setChecked(true); 
        mDrawerLayout.closeDrawers(); 
       } 
       return true; 
      } 
     }); 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

XML FOR FRAGMENT: 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/frame_container2" 
    tools:context="com.android.nohiccupsbeta.WhiskeyFragment"> 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:id="@+id/frag_whiskey_skin" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="8dp" 
     android:textColor="#000000" 
     android:textSize="16sp" /> 

    <ImageButton 
     android:id="@+id/expand_collapse" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:background="@android:color/transparent" 
     android:src="@drawable/ic_expand_more" 
     android:padding="16dp"/> 

</FrameLayout> 

JAVA: 

public class WhiskeyFragment extends Fragment { 

    private TextView mWhiskeySkin; 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle SavedInstanceState) { 
     super.onViewCreated(view, SavedInstanceState); 
     getActivity().setTitle("WHISKEY EFFECTS"); 

     mWhiskeySkin = (TextView) view.findViewById(R.id.frag_whiskey_skin); 
     mWhiskeySkin.setText(R.string.whiskey_skin); 
     hasOptionsMenu(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.fragment_whiskey, container, false); 
     hasOptionsMenu(); 
     return v; 
    } 
} 

XML FOR SECOND ACTIVITY: 

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/frame_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

JAVA: 

public class whiskeyActivity extends AppCompatActivity { 

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

    public class Whiskeyed { 

     private String whiskeySkin; 
     private String whiskeyBrain; 

     public String getWhiskeySkin(){ 
      return whiskeySkin; 
     } 
     public String getWhikeyBrain(){ 
      return whiskeyBrain; 
     } 
     public void setWhiskeySkin(String whiskey_skin){ 
      this.whiskeySkin = whiskey_skin; 
     } 

     public void setWhiskeyBrain(String whiskeyBrain) { 
      this.whiskeyBrain = whiskeyBrain; 
     } 
    } 

} 
+0

Wenn Sie die Navigationsschublade zum ersten Mal verwenden, versuchen Sie, die standardmäßige Navigationsaktivität von Android Studio zu integrieren, einfach und verständlich. sonst, wenn Sie in diesem Code versuchen möchten, lassen Sie mich wissen, wird Ihnen helfen. –

+0

Ja, ich würde lieber versuchen, diesen Code zu beheben ... der harte Weg lol. Danke, ich würde mich über Ihre Hilfe freuen. – 7kevin

Antwort

0

Versuch Inhalt Ihrer onNavigationItemSelected Ihrer pageone.java

von hier zu ändern:

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    MenuItem itemWhiskey = (MenuItem) findViewById(R.id.itemWhiskey); 
    itemWhiskey.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem itemWhiskey) { 
      FragmentManager fm = getSupportFragmentManager(); 
      Fragment effectsFragment = fm.findFragmentById(R.id.frame_container2); 
      if (effectsFragment == null) { 
       effectsFragment = new WhiskeyFragment(); 
       fm.beginTransaction().add(R.id.frame_container2, effectsFragment).commit(); 
       getSupportActionBar().setTitle("Whiskey"); 
       itemWhiskey.setChecked(true); 
       mDrawerLayout.closeDrawers(); 
      } 
      return true; 
     } 
    }); 
    mDrawerLayout.closeDrawer(GravityCompat.START); 
    return true; 
} 

hier:

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.activity_pageone); // ID of your drawerLayout 
    int id = item.getItemId(); 

    switch (id) { 
     case R.id.menu1: // Change this as your menuitem in menu.xml. 
      // Your fragment code goes here.. 
      FragmentManager fm = getSupportFragmentManager(); 
      Fragment effectsFragment = fm.findFragmentById(R.id.frame_container2); 
      if (effectsFragment == null) { 
       effectsFragment = new WhiskeyFragment(); 
       fm.beginTransaction().add(R.id.frame_container2, effectsFragment).commit(); 
       getSupportActionBar().setTitle("Whiskey"); 
       itemWhiskey.setChecked(true); 
       mDrawerLayout.closeDrawers(); 
      } 
     break; 
     case R.id.menu2: // Change this as your menuitem in menu.xml. 
      // or Your fragment code goes here... 
     break; 
    } 
    mDrawerLayout.closeDrawer(GravityCompat.START, true); 
    return true; 
} 
+0

Vielen Dank für den Fortschritt. An dieser Stelle ist der onCreateOptionsMenu (für den oberen rechten Corer) der Knopf, der die gewünschte Reaktion liefert, aber der Navigationsmenüpunkt funktioniert noch nicht. Ich habe versucht, den Code für die Absicht in der navigationItemSelected-Funktion nach der Fragment-Deklaration aber keine Zigarre zu setzen. – 7kevin

Verwandte Themen