Android:有关==菜单==的学习

上下文菜单

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

context_menu.xml:

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

main.xml:

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

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

list_item.xml

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

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 ListData;    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 ListData;    private View MyView;    public MyAdapter(Context context,ListData){        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. android中的/system/bin/input工具
  2. android listview的创建及行删除操作
  3. Android(安卓)之怎么删除eclipse自动生成的//TODO Auto-generate
  4. 修正android 处理连续按键两次
  5. Android+Eclipse[Window下Android的应用开发环境]
  6. Android(安卓)创建其它应该程序的上下文对象
  7. Android(安卓)Toast工具类大放送
  8. android 4.2里面增加遥控器按键的方法
  9. android 获取手机的所有程序和widget的包名和启动类名

随机推荐

  1. Android USB/MTP相关实现
  2. android 界面布局 很好的一篇总结 【转】
  3. android面试题整理(2)
  4. 配置Qt Creator for Android
  5. Android Intent个人介绍
  6. Android 下的图片选择与裁剪开源库
  7. Android 布局 之 LinearLayout
  8. android消息机制之二--Handler
  9. android图片压缩的3种方法实例
  10. android api (83) —— InputMethodSessi