Android 导航抽屉和菜单充气器
我将我的应用程序从所有活动更改为带有片段的NavigationDrawer设置。我的一项活动的顶部有一个菜单,在这个新设置中不再显示。这是我的密码: 爪哇 XML: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
下面是带有菜单的片段:
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" />