Android ListView用法

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

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

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical">
 7
 8     <TextView
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:id="@+id/wordTextView"
12         android:text="word"
13         android:textSize="26dp"
14         android:layout_gravity="center"/>
15     <ListView
16         android:layout_width="match_parent"
17         android:layout_height="match_parent"
18         android:id="@+id/definitions_ListView">
19
20     </ListView>
21
22 </LinearLayout>

java文件:

setOnItemClickListener这是ListView的监听方法;
 1 package com.chenye.dictionarychange;
 2
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.AdapterView;
 7 import android.widget.ArrayAdapter;
 8 import android.widget.ListView;
 9 import android.widget.TextView;
10 import android.widget.Toast;
11
12 import org.w3c.dom.Text;
13
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.Collections;
17 import java.util.HashMap;
18 import java.util.Scanner;
19
20 public class MainActivity extends AppCompatActivity {
21
22     private HashMap<String, String> dictionary;  // 存放单词-单词含义的字典
23     private ArrayList<String> chosenWords; // 将所有单词存放到chosenwords
24     private String word;   //单词
25     private ArrayList<String> definations; // 含义列表
26     private ArrayAdapter<String> adapter;
27
28     @Override
29     protected void onCreate(Bundle savedInstanceState) {
30         super.onCreate(savedInstanceState);
31         setContentView(R.layout.activity_main);
32         readAllDefination();
33         this.chosenWords = new ArrayList<>(this.dictionary.keySet());  // 获取到所有单词并存在在ArrayList中
34         this.definations = new ArrayList<>();
35         this.adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, this.definations);  // 初始化ArrayAdapter
36         // 随机选择5个单词含义
37         pick4Definations();
38         // 将列表添加到adapter中
39         ListView defnListView = findViewById(R.id.definitions_ListView);
40         defnListView.setAdapter(this.adapter);
41         // 监听这个列表, 用到了匿名内部类
42         defnListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
43             @Override
44             public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
45                 ListView defnListView = findViewById(R.id.definitions_ListView);
46                 String chooseDefnText = defnListView.getItemAtPosition(i).toString();  // 获取点击位置的字符串, i是list的位置, 大部分情况下i和l(list的第几行)是一样的
47                 String correctDefn = MainActivity.this.dictionary.get(word);   // 获取对应单词的解释
48                 // 如果选择和正确结果一致,则:
49                 if(correctDefn.equals(chooseDefnText)){
50                     Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
51                 }else{
52                     Toast.makeText(MainActivity.this, "Wrong", Toast.LENGTH_SHORT).show();
53                 }
54                 // 选择之后在重新刷新一次列表,即再次挑选一个单词和5个单词的含义
55                 pick4Definations();
56
57             }
58         });
59     }
60     public void pick4Definations(){
61
62         Collections.shuffle(this.chosenWords);  // 打乱单词的存放位置
63         this.word = this.chosenWords.get(0);  // 获取存放单词的list中的第一个单词
64         TextView wordText = findViewById(R.id.wordTextView);
65         wordText.setText(this.word);  // 显示单词
66         this.definations.clear();  // 防止结果有脏数据,清空一下单词含义的list
67         for(int i = 0; i < 4; i++){
68             String defn = this.dictionary.get(this.chosenWords.get(i));  // 获取到单词对应的意思
69             this.definations.add(defn);
70         }
71         Collections.shuffle(this.definations);  // 打乱结果
72         this.adapter.notifyDataSetChanged();  // 通知adpter改变
73     }
74     // 将所有单词及其含义放在dictionary这个字典中
75     private void readAllDefination(){
76         Scanner scanner = new Scanner(getResources().openRawResource(R.raw.gre_words));
77         if(this.dictionary == null){
78             this.dictionary = new HashMap<>();
79         }
80         while (scanner.hasNext()){
81             String line = scanner.nextLine();
82             String[] spiece = line.split("\t");
83             this.dictionary.put(spiece[0], spiece[1]);
84         }
85     }
86 }
时间: 2024-07-31 00:57:41

Android ListView用法的相关文章

android ListView用法介绍

ListView在Android开发中是比较常用的组件,它是以列表的形式展示内容,并且还可以处理用户的选择与点击等操作: LIstView显示数据一般需要三方面: (1)ListView组件:用来展示列表的View: (2)数据:填充到View中的文字,图片等: (3)适配器:连接ListView与数据的适配器:

android ListView 用法

在Android开发中,listView 是比较常用的开发组件,它以列表的形式展现具体的内容,并且根据数据的长度自适应显示. 列表的显示需要三个元素: listView: 用来展示列表的view: 适配器:用来把数据映射到ListView上的中介:适配器类,用到了设计模式中的适配器模式,它是视图和数据之间的桥梁,负责提供对数据的访问,生成每一个列表项的view, 常用的适配器类有:ArrayAdapter, SimpleAdapter和SimpleCursorAdapter. 数据:被映射的字符

Android ListView的用法

ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应. 首先在xml里面定义一个ListView Xml代码   <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01&quo

Android listview与adapter用法

listview与adapter用法 博客分类: android 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常简单. 一个ListView的创建需要3个元素. (1)ListView中的每一列的View. (2)填入View的数据或者图片等. (3)连接数据与ListView的适配器. 也就是说,要使用ListView,首先要了解什么是适配器

Android ListView 常用用法(一)

ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应.   首先在xml里面定义一个ListView <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" and

Android ListView 常用用法(二)

ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件.先说说ListView的实现: 1.准备ListView要显示的数据: 2.使用一维或多维动态数组保存数据: 2.构建适配器,简单地来说,适配器就是Item数组,动态数组有多少元素就生成多少个Item: 3.把适配器添加到ListView,并显示出来. 接下来,就开始UI的XML代码: main.xml代码如下: <?xml version="1.0" encodi

Android ListView异步加载图片乱序问题,原因分析及解决方案

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是用法比较复杂的了,关键是用法复杂也就算了,它还经常会出现一些稀奇古怪的问题,让人非常头疼.比如说在ListView中加载图片,如果是同步加载图片倒还好,但是一旦使用异步加载图片那么问题就来了,这个问题我相信很多Android开发者都曾经遇到过,就是异步加载图片会出现错位乱序的情况.遇到这个问题时,不

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

本文转自 http://blog.sina.com.cn/s/blog_783ede030101bnm4.html 作者kiven 辞职3,4个月在家休息,本以为楼主要程序员逆袭,结果失败告终继续码农生涯今天开始更新博客. 正文. 项目中有个ListView内容比较复杂现在要添加长按删除功能.楼主自然想到利用ListView的onItemLongClick事件来处理.结果可想而知在实际体验中很不好,会出现失灵有些选项能触发onItemLongClick事件有些却没反应.楼主去网上看了都是focu

Android Listview整理

 Android实现带图标的ListView:http://blog.csdn.net/bear_huangzhen/article/details/23991119 Android listview与adapter用法:http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html android ListView详解: http://www.cnblogs.com/allin/archive/2010/05/11/1732