写了一个简单的示例来说明ListView的用法:给定一个单词,下面有四个含义,找出正确的一个,无论是否成功,则会跳转到下一个单词;
主要用到的知识有: findViewById()、  ListView、    AdapterView、 匿名内部类、 ArrayList的一些用法:

下面主要看代码,代码里面注释的很详细,就不再过多赘述:
xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/wordTextView"
android:text="word"
android:textSize="26dp"
android:layout_gravity="center"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/definitions_ListView"> </ListView> </LinearLayout>

java文件:

setOnItemClickListener这是ListView的监听方法;
 package com.chenye.dictionarychange;

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import org.w3c.dom.Text; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner; public class MainActivity extends AppCompatActivity { private HashMap<String, String> dictionary; // 存放单词-单词含义的字典
private ArrayList<String> chosenWords; // 将所有单词存放到chosenwords
private String word; //单词
private ArrayList<String> definations; // 含义列表
private ArrayAdapter<String> adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
readAllDefination();
this.chosenWords = new ArrayList<>(this.dictionary.keySet()); // 获取到所有单词并存在在ArrayList中
this.definations = new ArrayList<>();
this.adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, this.definations); // 初始化ArrayAdapter
// 随机选择5个单词含义
pick4Definations();
// 将列表添加到adapter中
ListView defnListView = findViewById(R.id.definitions_ListView);
defnListView.setAdapter(this.adapter);
// 监听这个列表, 用到了匿名内部类
defnListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
ListView defnListView = findViewById(R.id.definitions_ListView);
String chooseDefnText = defnListView.getItemAtPosition(i).toString(); // 获取点击位置的字符串, i是list的位置, 大部分情况下i和l(list的第几行)是一样的
String correctDefn = MainActivity.this.dictionary.get(word); // 获取对应单词的解释
// 如果选择和正确结果一致,则:
if(correctDefn.equals(chooseDefnText)){
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "Wrong", Toast.LENGTH_SHORT).show();
}
// 选择之后在重新刷新一次列表,即再次挑选一个单词和5个单词的含义
pick4Definations(); }
});
}
public void pick4Definations(){ Collections.shuffle(this.chosenWords); // 打乱单词的存放位置
this.word = this.chosenWords.get(0); // 获取存放单词的list中的第一个单词
TextView wordText = findViewById(R.id.wordTextView);
wordText.setText(this.word); // 显示单词
this.definations.clear(); // 防止结果有脏数据,清空一下单词含义的list
for(int i = 0; i < 4; i++){
String defn = this.dictionary.get(this.chosenWords.get(i)); // 获取到单词对应的意思
this.definations.add(defn);
}
Collections.shuffle(this.definations); // 打乱结果
this.adapter.notifyDataSetChanged(); // 通知adpter改变
}
// 将所有单词及其含义放在dictionary这个字典中
private void readAllDefination(){
Scanner scanner = new Scanner(getResources().openRawResource(R.raw.gre_words));
if(this.dictionary == null){
this.dictionary = new HashMap<>();
}
while (scanner.hasNext()){
String line = scanner.nextLine();
String[] spiece = line.split("\t");
this.dictionary.put(spiece[0], spiece[1]);
}
}
}

Android ListView用法的更多相关文章

  1. android ListView用法介绍

    ListView在Android开发中是比较常用的组件,它是以列表的形式展示内容,并且还可以处理用户的选择与点击等操作: LIstView显示数据一般需要三方面: (1)ListView组件:用来展示 ...

  2. xamarin android listview的用法

    listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...

  3. Android listview与adapter用法(BaseAdapter + getView)

    Android listview与adapter用法http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html package ...

  4. Android ListView OnItemLongClick和OnItemClick事件内部细节分享以及几个比较特别的属性

    本文转自 http://blog.sina.com.cn/s/blog_783ede030101bnm4.html 作者kiven 辞职3,4个月在家休息,本以为楼主要程序员逆袭,结果失败告终继续码农 ...

  5. [置顶] android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  6. Android ListView工作原理完全解析,带你从源码的角度彻底理解

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据   转载请注明出处:h ...

  7. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  8. Android ListView onItemClick Not Work

    Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...

  9. Android Meun 用法

    Android Meun 用法 点击菜单实体键弹出菜单:如下图 main_activity.xml <?xml version="1.0" encoding="ut ...

随机推荐

  1. 画报表框架——Echarts.js

    官网:http://echarts.baidu.com/index.html ————————————————————————————————— 先看看我做的第一个柱状图形报表 ——————————— ...

  2. badboy页面脚本发生错误,解决方案

    1.参考网址:https://jingyan.baidu.com/article/e9fb46e17537797520f76645.html?from=qqbrowser061108 本人亲自测试,方 ...

  3. Windows下用cmd命令安装及卸载服务[转]

    第一种方法: 1. 开始 ->运行 ->cmd2. cd到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(Framework版本号按IIS配置) ...

  4. 从asp.net到jsp:3分钟看透Jsp&Servlet

    零:JSP是谁? 话说故事的开头是这样的:JSP全名为Java Server Pages,其根本是一个简化的Servlet设计:后来的详细事情有请各位自便.美女→找→谷哥 or 帅哥→找→度娘 插播: ...

  5. Python风格规范-FYI

    Python风格规范 分号 Tip 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 Tip 每行不超过80个字符 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. Py ...

  6. POJ - 3045 Cow Acrobats (二分,或者贪心)

    一开始是往二分上去想的,如果risk是x,题目要求则可以转化为一个不等式,Si + x >= sigma Wj ,j表示安排在i号牛上面的牛的编号. 如果考虑最下面的牛那么就可以写成 Si + ...

  7. Object comparison - (BOOL)isEqual:(id)other

    https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Obje ...

  8. Flutter Json序列号和反序列化遇到问题 Missing "part 'xxx.g.dart';"

    /** * * 1.@JsonSerializable() 这是表示告诉编译器这个类是需要生成Model类的 * 2,@JsonKey 由于服务器返回的部分数据名称在Dart语言中是不被允许的, * ...

  9. 在RichTextBox控件中添加超链接文本

    实现效果: 知识运用: RichTextBox控件的AppendText方法 public void AppendText{string textData} //向控件中添加文本内容 和Process ...

  10. 访问虚拟机中web服务的

    经常发现假如我们想弄一点小玩意或跑一些小demo,总是要不断的在自己的工作本本上搭建不同的运行环境,久而久之,本本上充斥着各种软件,速度下降了,同时管理也非常的不方便.于是想到用虚拟机来搭建运行环境, ...