Navigationdrawer和菜单inflater

时间:2016-07-17 15:43:13

标签: android menu navigation-drawer

我将我的应用程序从所有活动更改为带有碎片的NavigationDrawer设置。我的一个活动有一个顶部菜单,这个新设置不再显示。这是我的代码:

爪哇

public class BurgerMenu extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

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

        Toolbar toolbar = setToolBar();

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        // Check that the activity is using the layout version with
        // the fragment_container FrameLayout
        if (findViewById(R.id.fragment_container) != null) {

            // However, if we're being restored from a previous state,
            // then we don't need to do anything and should return or else
            // we could end up with overlapping fragments.
            if (savedInstanceState != null) {
                return;
            }

            // Create a new Fragment to be placed in the activity layout
            LoginFragment firstFragment = new LoginFragment();

            // In case this activity was started with special instructions from an
            // Intent, pass the Intent's extras to the fragment as arguments
            firstFragment.setArguments(getIntent().getExtras());

            // Add the fragment to the 'fragment_container' FrameLayout
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, firstFragment).commit();
        }
    }

    private Toolbar setToolBar()  {
        Toolbar tb = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(tb);
        ActionBar ab = getSupportActionBar();
        ab.setDisplayHomeAsUpEnabled(true);
        return tb;
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.burger_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {
            // Handle the camera action
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>

<include layout="@layout/toolbar"/>

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

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_burger_menu"
    app:menu="@menu/activity_burger_menu_drawer" />

以下是菜单中的片段:

public class MainActivity extends Fragment {

    public List<MoodEntry> moodList;
    private MoodEntryDataSource dataSource;

    public Date month_year_date;
    private int status = 0;

    private View v;
    private FragmentActivity fragmentActivity;
    private Context context;

    private LineChart chart;
    private TextView textTop;
    private TextView textMid;
    private TextView textBot;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragmentActivity = super.getActivity();
        v = inflater.inflate(R.layout.activity_main, container, false);
        context = fragmentActivity.getApplicationContext();

        dataSource = new MoodEntryDataSource(context);

        month_year_date = new Date();

        final RadioGroup radioGroup = (RadioGroup) v.findViewById(R.id.radioButtonGroupStatus);
        final RadioButton private_radio = (RadioButton) v.findViewById(R.id.radioButtonPrivatStart);
        final RadioButton business_radio = (RadioButton) v.findViewById(R.id.radioButtonBusinessStart);

        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (private_radio.isChecked()) {
                    status = MoodEntry.PRIVATE;
                } else if (business_radio.isChecked()) {
                    status = MoodEntry.BUSINESS;
                }
                loadListEntries();
            }
        });

        // Graph
        textTop = (TextView) v.findViewById(R.id.textView7);
        textMid = (TextView) v.findViewById(R.id.textView9);
        textBot = (TextView) v.findViewById(R.id.textView8);
        setYLabelVisibility(false);
        chart = (LineChart) v.findViewById(R.id.chart);
        chart.setTouchEnabled(false);
        chart.setDescription("Datum");
        chart.setNoDataText(this.getString(R.string.no_data_to_show));

        XAxis xAxis = chart.getXAxis();
        //xAxis.setLabelsToSkip(5);
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawGridLines(false);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setAvoidFirstLastClipping(true);

        YAxis left = chart.getAxisLeft();
        left.setAxisMinValue(-5);
        left.setAxisMaxValue(5);
        left.setDrawZeroLine(true);
        left.setLabelCount(0, false);
        left.setDrawLabels(false);
        //left.setShowOnlyMinMax(true);


        chart.getAxisRight().setEnabled(false);



        return v;
    };

    @Override
    public void onResume() {
        super.onResume();
        dataSource.open();
        loadListEntries();
    }

    @Override
    public void onPause() {
        super.onPause();
        dataSource.close();
    }

    /**
     * Shows the entries for month in month_year_date in diagram and list
     */
    private void loadListEntries() {
        TextView textView = (TextView) v.findViewById(R.id.textView_MonthYear);
        textView.setText(new SimpleDateFormat("MMMM yyyy", Locale.GERMAN).format(month_year_date));
        List<MoodEntry> moodListForGraph = dataSource.getMoodEntriesByMonthAndByStatus(month_year_date, MoodEntry.SORT_BY_DATE,status);
        updateData(moodListForGraph);

        moodList = dataSource.getMoodEntriesByMonthAndByStatus(month_year_date, MoodEntry.SORT_BY_MOOD,status);
        MoodEntryListAdapter adapter = new MoodEntryListAdapter(fragmentActivity, moodList);
        ListView moodListView = (ListView) v.findViewById(R.id.listview_moods);
        moodListView.setAdapter(adapter);

        moodListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                showDetailView(position);
            }
        });
    }

    /**
     * Shows the entries of the month selected by date
     * @param date date within month that should be shown
     */
    public void setMonthYear(Date date) {
        month_year_date = date;
        loadListEntries();
    }


    /**
     * Opens the Detail View of list item on pos
     * @param pos pos of selected item
     */
    public void showDetailView(int pos) {
        Bundle bundle = new Bundle();
        bundle.putLong("entry_id", moodList.get(pos).getId());
        Fragment moodDetail = new MoodDetailActivity();
        moodDetail.setArguments(bundle);
        FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.fragment_container, moodDetail);
        transaction.addToBackStack(null);
        transaction.commit();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_main, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_add_entry:
                Fragment addEntry = new AddEntryActivity();
                FragmentTransaction transaction = fragmentActivity.getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container, addEntry);
                transaction.addToBackStack(null);
                transaction.commit();
                return true;
            case R.id.action_date_picker:
                Calendar cal = Calendar.getInstance();
                cal.setTime(month_year_date);
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = 1;

                // TODO 0 durch Theme ersetzen. 0 war: AlertDialog.THEME_HOLO_LIGHT
                DatePickerDialog dpd = new DatePickerDialog(getActivity(), 0,datePickerListener,year, month, day){
                    @Override
                    protected void onCreate(Bundle savedInstanceState)
                    {
                        super.onCreate(savedInstanceState);
                        int day = getContext().getResources().getIdentifier("android:id/day", null, null);
                        if(day != 0){
                            View dayPicker = findViewById(day);
                            if(dayPicker != null){
                                dayPicker.setVisibility(View.GONE);
                            }
                        }
                    }
                };
                dpd.show();
                //DatePickerFragment datePickerFragment = new DatePickerFragment();
                //datePickerFragment.show(fragmentActivity.getFragmentManager(), "Date Picker");
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int month, int day) {
                Calendar cal = Calendar.getInstance();
                cal.set(year, month, 1);
                setMonthYear(cal.getTime());
        }
    };

    // Graph
    public void updateData(List<MoodEntry> moodEntries) {
        chart.clear();

        ArrayList<Entry> entryList = new ArrayList<Entry>();
        ArrayList<String> xVals = new ArrayList<String>();

        for (int i = 0; i < moodEntries.size(); i++) {
            MoodEntry moodEntry = moodEntries.get(i);
            int mood_value = moodEntry.getMood();
            xVals.add(moodEntry.getDisplayDateOnly());
            entryList.add(new BarEntry(mood_value, i));
        }
        LineDataSet dataSet = new LineDataSet(entryList, "Einträge");
        dataSet.setAxisDependency(YAxis.AxisDependency.LEFT);
        dataSet.setLineWidth(2f);
        dataSet.setColor(getColor(R.color.graph_line));
        dataSet.setCircleColor(getColor(R.color.graph_line));

        ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
        dataSets.add(dataSet);

        LineData data = new LineData(xVals, dataSets);
        data.setDrawValues(false);

        if (moodEntries.size()!=0) {
            chart.setData(data);

            Legend legend = chart.getLegend();
            legend.setEnabled(false);

            setYLabelVisibility(true);
            chart.notifyDataSetChanged();
            chart.invalidate();
        } else {
            setYLabelVisibility(false);
        }
    }

    private int getColor(int colorRes) {
        return ContextCompat.getColor(getContext(), colorRes);
    }

    private void setYLabelVisibility(boolean visible) {
        if (visible) {
            textTop.setVisibility(View.VISIBLE);
            textMid.setVisibility(View.VISIBLE);
            textBot.setVisibility(View.VISIBLE);
        } else {
            textTop.setVisibility(View.INVISIBLE);
            textMid.setVisibility(View.INVISIBLE);
            textBot.setVisibility(View.INVISIBLE);
        }

    }


}

导航工具栏中的工具栏未显示此片段,片段菜单也不显示。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

自己找到答案,不得不改变某事。在XML中:

<?xml version="1.0" encoding="utf-8"?>
<StackLayout>
<include layout="@layout/toolbar"/>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</StackLayout>
<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_burger_menu"
    app:menu="@menu/activity_burger_menu_drawer" />