• Android:有关菜单的学习(供自己参考)


    Android:有关菜单的学习

    上下文菜单

    上下文菜单就是手机中对某一项进行点击一定时间后弹出的针对该项处理的菜单。

    context_menu.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/action_rotate"
            android:title="Rotate"/>
    
        <item
            android:id="@+id/action_resize"
            android:title="Resize"/>
    </menu>
    

    main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Pop up the Context Menu"
            android:id="@+id/button1"/>
    
    </LinearLayout>
    

    MainActivity:

    package com.example.contextmenudemo;
    
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.ContextMenu;
    import android.view.MenuInflater;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
        private Button button1;//使用该按键来触发上下文菜单
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initUI();
        }
    
        private void initUI(){
            button1 = (Button)findViewById(R.id.button1);
            registerForContextMenu(button1);//对按键进行上下文菜单触发的注册
        }
    
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            MenuInflater inflater = getMenuInflater();//需要用到MenuInflater
            inflater.inflate(R.menu.context_menu,menu);//来获取Menu中的Item
        }
    
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            if(item.getItemId()==R.id.action_rotate){//用来判断你选择了menu中的哪个Item
                showAlertDialog("Rotate","you selected Rotate");
                return true;
            }else if (item.getItemId()==R.id.action_resize){
                showAlertDialog("Resize","You selected Resize");
                return true;
            }
            return super.onContextItemSelected(item);
        }
    
        private void showAlertDialog(String title,String message){
            AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle(title);
            alertDialog.setMessage(message);
            alertDialog.show();
        }
    }
    
    

    效果:

    Q:乍一看好像很简单,但一般这类菜单是用来删除ListView中的item用的,那又如何实现对ListView的删除呢?

    A:得到对ListView的处理重在获得item的位置

    main_activity.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></ListView>
    
    </LinearLayout>
    

    list_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:textSize="26dp"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="item: X"
            android:id="@+id/list_item_text"/>
    
    </LinearLayout>
    

    MainActivity.java

    package com.example.listviewdemo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.annotation.StringRes;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.ContextMenu;
    import android.view.MenuInflater;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.AdapterView;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    public class MainActivity extends Activity {
        private ListView list;
        private List<String>Data;
        private int item_id;
        private MyAdapter adapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_activity);
            initUI();
        }
    
        public void initUI(){
            list = (ListView)findViewById(R.id.list);
            //往List中添加内容,让ListView显示Data中的内容
            Data = new ArrayList<>();
            for(int i=0;i<10;i++){
                Data.add("item"+i);
            }
            adapter = new MyAdapter(MainActivity.this,Data);
            list.setAdapter(adapter);
            registerForContextMenu(list);
        }
    
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)menuInfo;
            item_id = info.position;
            //以上的代码是获得所点击的ListView位置
            
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu_main,menu);
            super.onCreateContextMenu(menu, v, menuInfo);
        }
    
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            if(item.getItemId()==R.id.action_delete){
                Data.remove(item_id);
                //下面这条代码是为了刷新ListView
                adapter.notifyDataSetChanged();
            }
            return super.onContextItemSelected(item);
        }
    }
    
    

    Myadapter.java

    package com.example.listviewdemo;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    import java.util.List;
    
    /**
     * Created by Funny_One on 2017/8/28.
     */
    
    public class MyAdapter extends BaseAdapter {
        private Context context;
        private List<String>Data;
        private View MyView;
    
        public MyAdapter(Context context,List<String>Data){
            this.context = context;
            this.Data = Data;
        }
    
        @Override
        public int getCount() {
            return Data.size();
        }
    
        @Override
        public Object getItem(int i) {
            return 0;
        }
    
        @Override
        public long getItemId(int i) {
            return 0;
        }
    
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            MyView = layoutInflater.inflate(R.layout.list_item,null);
            TextView text =(TextView)MyView.findViewById(R.id.list_item_text);
            text.setText(Data.get(i));
            return MyView;
        }
    }
    
    

    效果:

    (参考网站:给ListView注册上下文菜单,长按某项item并根据弹出菜单删除该item)

  • 相关阅读:
    第二次作业
    《自动化技术中的进给电气传动》读书笔记1.1-1.2
    证券投资分析
    微信官方文档概述
    联想拯救者Y7000电池无法充电问题
    Ubuntu用户权限管理
    证券市场基础知识
    Markdown All in One使用教程
    Markdown学习笔记
    第九周
  • 原文地址:https://www.cnblogs.com/VersionP1/p/7498340.html
Copyright © 2020-2023  润新知