简体   繁体   English

菜单项在导航抽屉中单击,目的在于承载片段的活动

[英]Menu item click in a navigation drawer intent to activity hosting a fragment

Disclaimer: This is the first app I am building so I am learning the hard way to use fragments first, so my code is all over the place. 免责声明:这是我正在构建的第一个应用程序,因此我正在学习首先使用片段的困难方法,因此我的代码无处不在。

I have menu items inside a navigation view that loads fine however the menu item clicks don't work. 我在导航视图中具有菜单项,该菜单项可以很好地加载,但是菜单项的单击不起作用。 It doesn't crash it just stares at me. 它不会崩溃,只是盯着我。 I would like to use an intent to display a fragment and I am lost from changing and trying so many different options. 我想使用一种意图来显示片段,而我因更改和尝试了许多不同的选项而迷失了方向。

XML FOR NAV DRAWER & MENU ITEMS: 用于导航栏和菜单项的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;
        }
    }

}

try to change to content of your onNavigationItemSelected of your pageone.java 尝试更改为onNavigationItemSelectedpageone.java

from here: 从这里:

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

to here: 到这里:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM