Android Criminal实例--(6)工具栏菜单项的使用

菜单栏符号的选择

Android studio中自带有很多菜单符号,选中drawable
这里写图片描述
这里写图片描述
就可以随便选择需要的符号

代码实现
public class CrimeListFragment extends Fragment {

    public static final String SUBTITLE = "subtitle";
    private RecyclerView mRecyclerView;
    private CrimeAdpater mCrimeAdpater;


    private boolean mSubtitleVisible;


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //接受菜单选项回调
        setHasOptionsMenu(true);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.crime_list_fragment,container,false);

        if(savedInstanceState!=null){
           mSubtitleVisible=savedInstanceState.getBoolean(SUBTITLE);
        }

        mRecyclerView=(RecyclerView)view.findViewById(R.id.crime_recycler);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        updateUI();
        return view;
    }

    private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        private TextView list_title;
        private TextView list_date;

        Crime mCrime;
        public void bind(Crime crime){
            mCrime=crime;
            list_title.setText(crime.getTitle());
            list_date.setText(crime.getDate().toString());
        }

        public CrimeHolder(LayoutInflater inflater,ViewGroup parent){
            super(inflater.inflate(R.layout.crime_list_item,parent,false));

            list_title=(TextView)itemView.findViewById(R.id.list_title);
            list_date=(TextView)itemView.findViewById(R.id.list_date);

            itemView.setOnClickListener(this);
        }



        @Override
        public void onClick(View v) {
           // Toast.makeText(getActivity(), mCrime.getTitle()+"click!", Toast.LENGTH_SHORT).show();
           // Intent intent= new Intent(getActivity(),CrimeActivity.class);
           // Intent intent=CrimeActivity.newIntent(getActivity(),mCrime.getId());
            Intent intent= CrimePagerActivity.newIntent(getActivity(),mCrime.getId());

            startActivity(intent);
        }
    }


    private class CrimeAdpater extends RecyclerView.Adapter<CrimeHolder>{

        private List<Crime> mCrimes;

        public CrimeAdpater(List<Crime> crimes){
            mCrimes=crimes;
        }

        @Override
        public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater=LayoutInflater.from(getActivity());
            return new CrimeHolder(layoutInflater,parent);
        }

        @Override
        public void onBindViewHolder(CrimeHolder holder, int position) {

            Crime crime=mCrimes.get(position);
            holder.bind(crime);
        }

        @Override
        public int getItemCount() {
            return mCrimes.size();
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        updateUI();
    }

    private void updateUI(){

        CrimeLab crimeLab=CrimeLab.getCrimeLab(getActivity());
        List<Crime> crimes=crimeLab.getCrimes();

//        mCrimeAdpater=new CrimeAdpater(crimes);
//        mRecyclerView.setAdapter(mCrimeAdpater);
        if(mCrimeAdpater==null){
            mCrimeAdpater=new CrimeAdpater(crimes);
            mRecyclerView.setAdapter(mCrimeAdpater);
        }else{
            mCrimeAdpater.notifyDataSetChanged();
        }

        updateSubtitle();
    }


//创建菜单,传入菜单资源
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_crime_list,menu);

        MenuItem subtitleItem=menu.findItem(R.id.show_subtitle);
        if(mSubtitleVisible){
            subtitleItem.setTitle("show");
        }else{
            subtitleItem.setTitle("hide");
        }
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.new_crime:
                Crime crime=new Crime();
                CrimeLab.getCrimeLab(getActivity()).addCrime(crime);
                Intent intent=CrimePagerActivity.newIntent(getActivity(),crime.getId());
                startActivity(intent);
                return true;
            case R.id.show_subtitle:
                mSubtitleVisible=!mSubtitleVisible;
                getActivity().invalidateOptionsMenu();
                updateSubtitle();
                return  true;
                default:
                    return super.onOptionsItemSelected(item);
        }
    }

//显示有多少条项目
    public void updateSubtitle(){
        CrimeLab crimeLab=CrimeLab.getCrimeLab(getActivity());
        int crimeCount=crimeLab.getCrimes().size();
        String subtitle=getString(R.string.subtitle_format,crimeCount);

        if(!mSubtitleVisible){
            subtitle=null;
        }

        AppCompatActivity activity=(AppCompatActivity)getActivity();
        activity.getSupportActionBar().setSubtitle(subtitle);
    }
//屏幕旋转时数据丢失,通过bundle保存,再在onCreateView方法中获取
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(SUBTITLE,mSubtitleVisible);
    }
}
创建menu文件

选中res

这里写图片描述

这里写图片描述
最后自动会生成menu的文件夹及其xml文件

代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/new_crime"
        android:icon="@drawable/ic_menu_add"
        android:title="@string/new_crime"
        app:showAsAction="ifRoom|withText"/>

    <item
        android:id="@+id/show_subtitle"
        android:title="@string/show_subtitle"
        app:showAsAction="ifRoom"/>
</menu>

app:showAsAction=”ifRoom|withText”
意思是只要空间足够,菜单栏图标及文字描述都会显示在工具栏上,如果空间仅够显示图标,文字描述就不会显示,或是仅够显示文字描述,图标不会显示
ifroom:让操作系统决定如何显示菜单栏

猜你喜欢

转载自blog.csdn.net/ayangann915/article/details/81316432
今日推荐