实验目的:
1.学习使用ListView及其事件响应方法。
2.阅读sdk/doc/index脱机文档,学习使用弹出菜单PopupMenu及其事件响应方法。
实验要求:
1.实现一个列表,其中显示班级学号姓名,提供添加功能
2.对添加的选项,通过长按某项,调用弹出菜单显示删除功能,并删除该选项。
1.初始情况
点击输入之后
长按某项,弹出删除
点击删除后
初始化界面 practice2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="班级:"
android:gravity="center"
android:textSize="70px"/>
<EditText
android:id="@+id/room"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:textSize="70px"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="姓名:"
android:gravity="center"
android:textSize="70px"/>
<EditText
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:textSize="70px"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="学号:"
android:gravity="center"
android:textSize="70px"/>
<EditText
android:id="@+id/number"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:textSize="70px"/>
</LinearLayout>
<Button
android:id="@+id/bt_in"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="输入"
android:textSize="70px"/>
<ListView
android:id="@+id/lv"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</LinearLayout>
ListView 头格式 practice2_header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2.3"
android:text="班级"
android:textSize="70px"
android:gravity="center"/>
<TextView
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:text="姓名"
android:textSize="70px"
android:gravity="center"/>
<TextView
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="3"
android:text="学号"
android:textSize="70px"
android:gravity="center"/>
</LinearLayout>
</LinearLayout>
** 自定义Item 格式 practice2_item.xml**
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/item_room"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2.3"
android:text="班级"
android:textSize="50px"
android:gravity="center"/>
<TextView
android:id="@+id/item_name"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:text="姓名"
android:textSize="50px"
android:gravity="center"/>
<TextView
android:id="@+id/item_num"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="3"
android:text="学号"
android:textSize="50px"
android:gravity="center"/>
</LinearLayout>
</LinearLayout>
menu , practice2_menu.xml(在menu目录下,而不是layout)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/del"
android:title="删除"/>
</menu>
MainActivity.java
package com.example.review;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.HeaderViewListAdapter;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
Button bt_in = null;
EditText et_room = null, et_name = null, et_num = null;
ListView listView = null;
ArrayList<Item> list = new ArrayList<Item>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.practice2);
bt_in = findViewById(R.id.bt_in);
et_room = findViewById(R.id.room);
et_name = findViewById(R.id.name);
et_num = findViewById(R.id.number);
listView = findViewById(R.id.lv);
View headerView = getLayoutInflater().inflate(R.layout.practice2_header, null);
listView.addHeaderView(headerView, null, false);
MyAdapter adapter = new MyAdapter(this, R.layout.practice2_item, list);
listView.setAdapter(adapter);
bt_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String t_room = et_room.getText().toString();
String t_name = et_name.getText().toString();
String t_num = et_num.getText().toString();
HeaderViewListAdapter temp=(HeaderViewListAdapter)listView.getAdapter();
((ArrayAdapter)temp.getWrappedAdapter()).add(new Item(t_room,t_name,t_num));
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (l >= 0) {
//定义弹出式菜单
PopupMenu popup = new PopupMenu(MainActivity.this, view);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.practice2_menu, popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.del:
HeaderViewListAdapter temp = (HeaderViewListAdapter) listView.getAdapter();
((ArrayAdapter) temp.getWrappedAdapter()).remove(temp.getItem(i));
return true;
default:
return false;
}
}
});
}
}
});
}
//定义一个Item 应该包含的内容
class Item {
public String room;
public String name;
public String number;
public Item(String room, String name, String number) {
this.room = room;
this.name = name;
this.number = number;
}
public String getRoom(){
return room;
}
public String getName(){
return name;
}
public String getNumber(){
return number;
}
}
//自定义适配器
class MyAdapter extends ArrayAdapter {
private int newResourceId;
public MyAdapter(Context context, int resourceID, List<Item> bdlist) {
super(context, resourceID, bdlist);
newResourceId = resourceID;
}
public View getView(final int position, View convertView, ViewGroup parent) {
Item item = (Item) getItem(position);
convertView = LayoutInflater.from(getContext()).inflate(newResourceId, parent, false);
TextView t_room = convertView.findViewById(R.id.item_room);
TextView t_name = convertView.findViewById(R.id.item_name);
TextView t_num = convertView.findViewById(R.id.item_num);
t_room.setText(item.getRoom());
t_name.setText(item.getName());
t_num.setText(item.getNumber());
return convertView;
}
}