给ListView注册上下文菜单,长按某项item并根据弹出菜单删除该item
来源:互联网 发布:淘宝的康恩贝那么便宜 编辑:程序博客网 时间:2024/05/22 12:03
首先,在为ListView添加数据,设置适配器。
其次,为listview注册上下文菜单。
最后,在重写的上下文菜单的onCreateContextMenu方法中去获取当长按ListView的时候对应item的positon
在onContextItemSelected()方法中去移除数据,刷新listview。
大概就是这样,下面给出代码。
一、布局文件 main_layout
<?xml version="1.0" encoding="utf-8"?><FrameLayout 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/my_listview" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView></FrameLayout>
二、MainActivity
public class MainActivity extends Activity { private ListView mListView; private List<String>mData; private MyListAdapter mAdapter; private int item_id; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); init(); } public void init(){ mListView = (ListView)findViewById(R.id.my_listview); mData = new ArrayList<>(); for (int i = 0; i <10 ; i++) { mData.add("item"+i); } mAdapter = new MyListAdapter(MainActivity.this,mData); mListView.setAdapter(mAdapter); registerForContextMenu(mListView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { //获取对应的item的positon AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; item_id = info.position; //设置菜单布局 MenuInflater inflater = new MenuInflater(FirstActivity.this); inflater.inflate(R.menu.menu,menu); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_f: mData.remove(item_id); mAdapter.notifyDataSetChanged(); break; } return true; }}
public class MyListAdapter extends BaseAdapter { private List<String>mData; private Context mContext; public MyListAdapter(Context mContext,List<String>mData) { this.mContext = mContext; this.mData = mData; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return 0; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view ; MyViewHorlder myViewHorlder; if (convertView==null) { view = LayoutInflater.from(mContext).inflate(R.layout.list_item_layout,null); myViewHorlder = new MyViewHorlder(); myViewHorlder.textView = (TextView)view.findViewById(R.id.list_item_text); view.setTag(myViewHorlder); }else { view = convertView; myViewHorlder = (MyViewHorlder) view.getTag(); } myViewHorlder.textView.setText(mData.get(position)); return view; } class MyViewHorlder{ TextView textView; }}
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_f" android:title="删除item"></item></menu>
其实这里最想记录的是,在这种情况下,如何获取到对应item的position。
在开始的时候想要用ListView的setOnItemLongClickListener这个方法去获取对应的positon,然后赋值给自己定义的全局变量。后来发现,onContextItemSelected方法却不会执行了。
还有一个类似的问题也记录下来:
在listview的item上要是有个控件,比如说button。想要点击这个按钮,删除item的话,那么当点击的时候想要拿到对应的item的positon的话,可以在适配器里面写一个接口回调,将positon作为参数给传递出去。
在适配器的getView方法中
myViewHorlder.deleteBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onDeleteItem.onItemclick(position); } });
回调接口
//定义监听接口 private onItemDeleteListener onDeleteItem; public interface onItemDeleteListener{ void onItemclick(int mPositon); } public void setOnDeleteItem(onItemDeleteListener onDeleteItem){ this.onDeleteItem = onDeleteItem; }
最后在MainActivity中
mAdapter.setOnDeleteItem(new MyListAdapter.onItemDeleteListener() { @Override public void onItemclick(int positon) { mData.remove(positon); mAdapter.notifyDataSetChanged(); } });
第一次写博客记录东西,新手有很多不足之处,希望各位大神能指点指点。
0 0
- 给ListView注册上下文菜单,长按某项item并根据弹出菜单删除该item
- 菜单(四)给ListView的item添加上下文菜单
- Android 上下文菜单:给ListView注册ContextMenu后获取被长按item的position
- 为ListView添加上下文菜单,并获取当前菜单所属item的id
- listView中长按item 启动一个上下文菜单框
- Android ListView长按事件弹出菜单并获取选中的item
- Android 长按Listview 每个item底部弹出菜单
- 给JList中的Item添加右键点击弹出菜单事件
- ListView Item侧滑菜单
- ListView item中的菜单PopupMenu
- Android之ListView长按列表项弹出菜单 给菜单项添加事件 获取上下文
- 通过ContextMenu上下文菜单获取ListView中被选中的条目item的信息
- android小问题:如何在Listview中获取上下文菜单对应的item项
- listView item添加长按菜单,并对菜单做出响应
- 长按listview弹出上下文菜单实现
- ListView:长按弹出上下文菜单(ContextMenu)
- 长按listview弹出上下文菜单实现
- 给EditText注册上下文菜单ContextMenu
- python学习笔记(三)
- 热修复,Tinker的接入
- 一元二次方程组(改进delta<0)
- 从业务分析到系统建模、研发 基本方法论
- LL(1)文法分析器简单实现
- 给ListView注册上下文菜单,长按某项item并根据弹出菜单删除该item
- 《月亮与六个便士》读后感
- IOS倒计时秒杀
- Maven依赖jar的自动升级配置
- iOS udp参考数据
- 第十四周的实践之数组大折腾
- 命令行批量检查或调整windows密码策略或密码复杂度
- SlidingMenu 设置沉浸式状态栏
- 十四周OJ2输入一个数插入有序数组中