实验目的

  • 学习使用ListView
  • 学习使用menu

实验要求

实现一个列表,其中显示班级学号姓名,提供添加功能,如需要删去某一项,长按该项,通过弹出菜单显示删除功能。

实验内容

实现效果

点击添加到ListView

长按某一项,弹出删除按钮

删除后的结果

实验代码

主要的布局文件:main1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="班级:"
android:textSize="20dp"
/>
<EditText
android:layout_width="254dp"
android:layout_height="wrap_content"
android:text="软件1603班"
android:width="150dp"
android:textAlignment="center"
android:maxWidth="10dp"
android:id="@+id/Class"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="学号:"
android:textSize="20dp" />
<EditText
android:layout_width="255dp"
android:layout_height="wrap_content"
android:text="2016012963"
android:width="150dp"
android:textAlignment="center"
android:maxWidth="10dp"
android:id="@+id/stuNo"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名:"
android:textSize="20dp"/>
<EditText
android:layout_width="257dp"
android:layout_height="wrap_content"
android:width="150dp"
android:text="李小明"
android:textAlignment="center"
android:maxWidth="10dp"
android:id="@+id/name"/>
</LinearLayout> <Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加"
android:textSize="20dp" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/lv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="4"></ListView>
</LinearLayout> </LinearLayout>

主要的ListViewTest.java文件

package com.example.administrator.listlearn;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.PopupMenu;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
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.TextView; import java.util.ArrayList;
import java.util.List; public class ListViewTest extends AppCompatActivity { EditText name,Class,stuNo;
Button btn;
ListView lv;
ArrayList<String> list;
ArrayAdapter<String> adp; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1); btn = (Button)findViewById(R.id.add); lv = (ListView)findViewById(R.id.lv1);
list = new ArrayList<String>();
adp = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
lv.setAdapter(adp); LayoutInflater inflater = LayoutInflater.from(ListViewTest.this);
View view=inflater.inflate(R.layout.head,null); lv.addHeaderView(view); btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
EditText et1,et2,et3;
et1=(EditText)findViewById(R.id.name);
et2=(EditText)findViewById(R.id.Class);
et3=(EditText)findViewById(R.id.stuNo);
temp=(HeaderViewListAdapter)lv.getAdapter();
((ArrayAdapter)temp.getWrappedAdapter()).add(et1.getText().toString()+" "+et2.getText().toString()+" "+et3.getText().toString());
}
});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, final int position, long l) {
if(l>0) {
PopupMenu popup = new PopupMenu(ListViewTest.this,view);
popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Log.i("test","testtest");
switch (item.getItemId()) {
case R.id.del:
HeaderViewListAdapter temp = (HeaderViewListAdapter) lv.getAdapter();
((ArrayAdapter)temp.getWrappedAdapter()).remove(temp.getItem(position));
Log.i("test","thisisatest");
return true;
default:
return false;
}
}
});
}
}});
}
}

次要的head.xml

位置(res/layout/head.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"> <TextView android:id="@+id/head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 班级 学号 姓名"
android:textSize="20dp"/>
</LinearLayout>

Menu文件main.xml

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

实验总结

ListView

ListView是用于垂直现实的列表空间,如果显示内容过多可以出现垂直滚动条。一个最基本用法是,首先需要为ListView建立适配器,并添加ListView中所现实的内容。

ListView listview=(ListView)findViewById(R.id.ListView01);
List<String>list = new ArrayList<String>();
list.add("ListView子项1");
list.add("ListView子项2");
list.add("ListView子项3");
ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list,list);
listview.setAdapter(adapter);
  • 通过ID引入ListView
  • 声明数组列表,并填入内容
  • 设置适配器adapter
  • 将适配器与ListView进行绑定

ListView添加头部尾部:

  • 添加头部:

    • 在setAdapter之前,listview.addHeaderView(headview);
  • 添加尾部:
    • 在setAdapter之前,listview.addFooterView(footview);
  • 需要注意,如果添加了头部,那么单击事件的item索引会增加1

具体用法

//添加头--在setAdapter之前  
//将布局文件转换成view  
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
View headView = inflater.inflate(R.layout.listview_head, null);  
listView.addHeaderView(headView);  
//设置适配器  
listView.setAdapter(myAdapter);  

添加头部之后,向listview中使用HeaderViewListAdapter添加item,HeaderViewListAdapter对原listview进行了包装,需要使用getWrappedAdapter()后转化为ArrayAdapter进行add或remove操作。

HeaderViewListAdapter temp=HeaderViewListAdapter)lv.getAdapter();

((ArrayAdapter)temp.getWrappedAdapter()).add(et1.getText().toString()+"   "+et2.getText().toString()+"    "+et3.getText().toString());  

PopupMenu

PopupMenu,弹出菜单,一个模态形式展示的弹出风格的菜单,绑在在某个View上,一般出现在被绑定的View的下方(如果下方有空间)。

核心步骤:

(1)通过PopupMenu的构造函数实例化一个PopupMenu对象,需要传递一个当前上下文对象以及绑定的View。

(2)调用PopupMenu.setOnMenuItemClickListener()设置一个PopupMenu选项的选中事件。

(3)使用MenuInflater.inflate()方法加载一个XML文件到PopupMenu.getMenu()中。

(4)在需要的时候调用PopupMenu.show()方法显示。

【Android实验】 UI设计-ListView的更多相关文章

  1. Android 高级UI设计笔记07:RecyclerView 的详解

    1. 使用RecyclerView       在 Android 应用程序中列表是一个非常重要的控件,适用场合非常多,如新闻列表.应用列表.消息列表等等,但是从Android 一出生到现在并没有非常 ...

  2. Android中UI设计的一些技巧!!!

    出处:http://blog.csdn.net/android_tutor/article/details/5995759 大家好,今天给大家分享的是Android中UI设计的一些技巧,本节内容主要有 ...

  3. Android应用UI设计流程

    Android应用UI设计流程 设计原理 1.在移动设计中,使用环境是最关键的因素.原型设计方法必须考虑尺寸因素 2.用户测试必须涵盖运动.声音和多点触控等方面: 进行移动设计和测试时,请将你知道的有 ...

  4. 【Android开发经验】Android举UI设计经验

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 1.Android眼下的主流设备分辨率为480×800.720×1280.1080×1920,单位是像素.在 ...

  5. Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item

    1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...

  6. Android 高级UI设计笔记01:使用ExpandableListView组件(ListView的扩展)

    1.ExpandableListView是一个用来显示二级节点的ListView. 比如如下效果的界面: 2.使用ExpandableListView步骤 (1)要给ExpandableListVie ...

  7. Android 高级UI设计笔记06:仿微信图片选择器(转载)

    仿微信图片选择器: 一.项目整体分析: 1. Android加载图片的3个目标: (1)尽可能的去避免内存溢出. a. 根据图片的显示大小去压缩图片 b. 使用缓存对我们图片进行管理(LruCache ...

  8. Android 高级UI设计笔记09:Android如何实现无限滚动列表

    ListView和GridView已经成为原生的Android应用实现中两个最流行的设计模式.目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们提供了一个良好,整洁的用户体验 ...

  9. Android 高级UI设计笔记08:Android开发者常用的7款Android UI组件(转载)

    Android开发是目前最热门的移动开发技术之一,随着开发者的不断努力和Android社区的进步,Android开发技术已经日趋成熟,当然,在Android开源社区中也涌现了很多不错的开源UI项目,它 ...

随机推荐

  1. mysql 内置功能 存储过程 创建无参存储过程

    操作哪个数据库,就把存储过程建到那个数据库 例如 现在use db2; 应该把存储过程 建立到db2数据库里 创建无参存储过程 delimiter // # 设置mysql结束符合为// create ...

  2. 前端写一个月的原生 Android 是如何一种体验?

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/j01G58UC80251/article/details/79017706 一个前端程序猿的一个月原 ...

  3. Java多线程的下载器(1)

    实现了一个基于Java多线程的下载器,可提供的功能有: 1. 对文件使用多线程下载,并显示每时刻的下载速度. 2. 对多个下载进行管理,包括线程调度,内存管理等. 一:单个文件下载的管理 1. 单文件 ...

  4. SVM入门——线性分类器的求解,核函数

    一.问题的描述 从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,可以用下面的式子表示: ...

  5. python开发中容易犯的错误整合

    写在前面 长期更新的博文.多数是一些比较隐蔽的问题.欢迎留言补充. pip并不是那么安逸 pip安装对于开发者来说确实是一种解放.可以自动安装依赖包,但执行最简单的pip安装命令时,并不是所有的依赖都 ...

  6. [LeetCode] 261. Graph Valid Tree _ Medium tag: BFS

    Given n nodes labeled from 0 to n-1 and a list of undirected edges (each edge is a pair of nodes), w ...

  7. DevExpress使用技巧总结

    DevExpress是非常主流的.NET控件,目前全世界和中国都用很多用户使用,不过由于是英文版,初次接触的同学可能会觉得困难,这里就总结DevExpress常见的10个使用技巧. 1.TextEdi ...

  8. Twitter OA prepare: Equilibrium index of an array

    Equilibrium index of an array is an index such that the sum of elements at lower indexes is equal to ...

  9. 登陆跳板机每天只输入一次token的方法——ssh clone session

    自从跳板机升级后,无所不在的token让小PE很是恼火,于是有了这篇文章@_@ Linux or Mac篇 在Fedora或者Mac下很简单,修改~/.ssh/config文件,没有的话,就新建一个( ...

  10. 用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台)

    windows   --> windows 写法均在py3.6 客户端写法 import socket client = socket.socket() client.connect(('192 ...