Android 导航抽屉和菜单充气器

Android 导航抽屉和菜单充气器,android,menu,navigation-drawer,Android,Menu,Navigation Drawer,我将我的应用程序从所有活动更改为带有片段的NavigationDrawer设置。我的一项活动的顶部有一个菜单,在这个新设置中不再显示。这是我的密码: 爪哇 XML: 下面是带有菜单的片段: public class MainActivity extends Fragment { public List<MoodEntry> moodList; private MoodEntryDataSource dataSource; public Date

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

爪哇

XML:



下面是带有菜单的片段:

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

    }


}
public类MainActivity扩展片段{
公众情绪列表;
私有MoodEntryDataSource数据源;
公开日期月\年\日;
私有int状态=0;
私人观点v;
私人碎片活动碎片活动;
私人语境;
专用线图;
私有文本视图文本顶部;
私有TextView textMid;
私有文本视图文本机器人;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreate(savedInstanceState);
fragmentActivity=super.getActivity();
v=充气机。充气(R.布局.活动\主容器,假);
context=fragmentActivity.getApplicationContext();
数据源=新的MoodEntryDataSource(上下文);
月\年\日期=新日期();
最终放射组放射组=(放射组)v.findViewById(R.id.RadioButtonGroup状态);
最终RadioButton private_radio=(RadioButton)v.findViewById(R.id.RadioButton PrivatStart);
最终RadioButton business_radio=(RadioButton)v.findViewById(R.id.RadioButton业务启动);
radioGroup.setOnCheckedChangeListener(新的radioGroup.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(RadioGroup组,int checkedId){
if(private_radio.isChecked()){
状态=MoodEntry.PRIVATE;
}else if(business\u radio.isChecked()){
状态=MoodEntry.BUSINESS;
}
loadListEntries();
}
});
//图表
textTop=(TextView)v.findViewById(R.id.textView7);
textMid=(TextView)v.findViewById(R.id.textView9);
textBot=(TextView)v.findViewById(R.id.textView8);
设置可视性(假);
chart=(线形图)v.findviewbyd(R.id.chart);
chart.setTouchEnabled(假);
图表说明(“基准”);
setNoDataText(this.getString(R.string.no_data_to_show));
XAxis XAxis=chart.getXAxis();
//xAxis.setLabelsToSkip(5);
xAxis.setDrawAxisLine(真);
xAxis.setDrawGridLines(false);
设置位置(xAxis.XAxisPosition.BOTTOM);
xAxis.setAvoidFirstLastClipping(真);
YAxis left=chart.getAxisLeft();
左。setAxisMinValue(-5);
左。setAxisMaxValue(5);
左。setDrawZeroLine(真);
左。setLabelCount(0,false);
左。setDrawLabels(假);
//左。设置ShowOnlyMinMax(真);
chart.getAxisRight().setEnabled(false);
返回v;
};
@凌驾
恢复时公开作废(){
super.onResume();
dataSource.open();
loadListEntries();
}
@凌驾
公共无效暂停(){
super.onPause();
dataSource.close();
}
/**
*在图表和列表中显示月中月\年\日的条目
*/
私有void loadListEntries(){
TextView TextView=(TextView)v.findViewById(R.id.TextView\u MonthYear);
textView.setText(新的SimpleDateFormat(“MMMM-yyyy”,Locale.derman).format(月\年\日));
List moodListForGraph=dataSource.getMoodEntriesByMonthAndByStatus(月\年\日期,MoodEntry.SORT \按\日期,状态);
更新数据(moodListForGraph);
moodList=dataSource.getMoodEntriesByMonthAndByStatus(月\年\日期,MoodEntry.SORT\按情绪,状态);
MoodEntryListAdapter=新的MoodEntryListAdapter(fragmentActivity,moodList);
ListView-moodListView=(ListView)v.findViewById(R.id.ListView\u-moods);
moodListView.setAdapter(适配器);
moodListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
showDetailView(位置);
}
});
}
/**
*显示按日期选择的月份的条目
*@param date应显示的月份内的日期
*/
公共无效setMonthYear(日期){
月\年\日=日期;
loadListEntries();
}
/**
*打开pos上列表项的详细视图
*@param pos所选项目的位置
*/
公共void showDetailView(内部位置){
Bundle=新Bundle();
bundle.putLong(“entry_id”,moodList.get(pos.getId());
片段moodDetail=新的MoodDetailActivity();
setArguments(bundle);
FragmentTransaction=fragmentActivity.getSupportFragmentManager().beginTransaction();
事务.替换(R.id.fragment\u容器,moodDetail);
transaction.addToBackStack(空);
commit();
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。主菜单,菜单);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.action\u add\u条目:
片段addEntry=新的AddEntryActivity();
FragmentTransaction=fragmentActivity.getSupportFragmentManager().beginTransaction();
事务.替换(R.id.fragment_容器,附录);
transaction.addToBackStack(空);
commit();
返回true;
案例R.id.行动\日期\选取者:
Calendar cal=Calendar.getInst
<?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);
        }

    }


}
<?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" />