0

免責事項:これは私が構築している最初のアプリですので、まずフラグメントを使用するという難しい方法を学んでいます。メニューアイテムをクリックすると、フラグメントをホストするためのナビゲーションドロワで表示されます

メニュー項目のクリックがうまくいかないナビゲーションビュー内にメニュー項目があります。それはちょうど私を見てクラッシュしないでください。私は断片を表示する意図を使用したいと思います。私は変化を遂げ、非常に多くの異なるオプションを試しています。 NAV DRAWER &メニュー項目の

XML:

<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

ナビゲーション・ドロワーを初めて使用している場合は、アンドロイド・スタジオのデフォルト・ナビゲーション・アクティビティーを簡単に理解できるように統合してみてください。 このコードで試してみたい場合は、私に教えてください、あなたを助けるでしょう。 –

+0

はい、私はむしろこのコードを是正しようとしています。ありがとう、私はあなたの助けに感謝します。 – 7kevin

答えて

0

ここからあなたのpageone.java

のごonNavigationItemSelectedの内容に変更してみてください。ここに

@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; 
} 

@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

ありがとうございます。この時点で、(右上のcorerの)onCreateOptionsMenuは、必要な反応を与えるボタンですが、ナビゲーションメニュー項目はまだ機能していません。私は、宣言の後にnavigationItemSelected関数にインテントのコードを入れてみましたが、シガーは入れませんでした。 – 7kevin

関連する問題