delete_title.xml 部分:
</pre><pre name="code" class="java"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_delete"
android:layout_marginRight="10dp"
android:id="@+id/imageView" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除"
android:textColor="#ffffff"
android:textSize="20dp"
android:id="@+id/textView2" />
</LinearLayout>
———————————————————————————————————————
activity_main.xml
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
——————————————————————————————————————————————
public class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
——————————————————————————————————————
public class Main3Activity extendsAppCompatActivity {
private static final int DELETE_ITEM = 0x100;
private ListView listView;
private MyAdapter myAdapter;
private LinkedList<User> users = new LinkedList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
listView = (ListView) findViewById(R.id.listView);
initData();
myAdapter = new MyAdapter(this,users);
listView.setAdapter(myAdapter);
registerForContextMenu(listView);
}
@Override
public void onCreateContextMenu(ContextMenumenu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderIcon(android.R.drawable.ic_menu_delete);//设置菜单的标题图标
menu.setHeaderTitle("删除");//设置菜单的标题
//自定义标题
// View view = getLayoutInflater().inflate(R.layout.delete_title,null);
// menu.setHeaderView(view);
System.out.println(menuInfo);
//menuInfo : 菜单信息(targetView,position,id)
//通过在menuInfo上获取长按列表项的视图对象,我们可以从该对象上获取数据
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
System.out.println(info.targetView);//列表项视图组件
TextView tv_id = (TextView) info.targetView.findViewById(R.id.textView2_id);
menu.add(0,DELETE_ITEM,100,"你真的要删除ID为["+tv_id.getText().toString()+"]的记录吗?");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
TextView tv_id = (TextView) info.targetView.findViewById(R.id.textView2_id);
int id = Integer.parseInt(tv_id.getText().toString());
remove(id);
myAdapter.notifyDataSetChanged();
return super.onContextItemSelected(item);
}
private void remove(int id){
int size = users.size();
User temp;
for (int i=0;i<size;i++){
temp = users.get(i);
if(temp.getId()==id){
users.remove(temp);
break;
}
}
}
private void initData(){
users.add(new User(1,"jack"));
users.add(new User(2,"tom"));
users.add(new User(3,"lily"));
users.add(new User(4,"lucy"));
users.add(new User(5,"bobo"));
}
private static class MyAdapter extends BaseAdapter{
private Context context;
private LinkedList<User> users;
public MyAdapter(Context context, LinkedList<User> users){
this.context = context;
this.users = users;
}
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int position) {
return users.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if(convertView==null){
convertView =LayoutInflater.from(context).inflate(R.layout.item,null);
vh = new ViewHolder();
vh.tv_id = (TextView)convertView.findViewById(R.id.textView2_id);
vh.tv_name = (TextView)convertView.findViewById(R.id.textView3_name);
convertView.setTag(vh);
}else{
vh = (ViewHolder)convertView.getTag();
}
User u = users.get(position);
vh.tv_id.setText(String.valueOf(u.getId()));
vh.tv_name.setText(u.getName());
return convertView;
}
private static class ViewHolder{
TextView tv_id;
TextView tv_name;
}
}
}