Android:有关菜单的学习(供自己参考)
16lz
2021-01-24
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)
更多相关文章
- android中的/system/bin/input工具
- android listview的创建及行删除操作
- Android(安卓)之怎么删除eclipse自动生成的//TODO Auto-generate
- 修正android 处理连续按键两次
- Android+Eclipse[Window下Android的应用开发环境]
- Android(安卓)创建其它应该程序的上下文对象
- Android(安卓)Toast工具类大放送
- android 4.2里面增加遥控器按键的方法
- android 获取手机的所有程序和widget的包名和启动类名