在Android开发中经常会用到ListView,也就是列表,而列表的内容需要如何决定呢,很好的方法是使用各种adapter

首先来看看用entries添加列表内容

在布局文件中,创建一个ListView,其内容在values文件夹下的arrays.xml文件中

<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/books"
android:divider="#f00"
android:dividerHeight="2px"
android:headerDividersEnabled="false"/>

entries为ListView中的内容;divider为分隔条颜色;dividerHei为分隔条高度

资源文件arrays.xml如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="books">
<item>11111111</item>
<item>22222222</item>
<item>33333333</item>
<item>44444444</item>
</string-array>
</resources>

这样就完成了一个简单的ListView,该列表的内容是存在另一个xml文件中的。

接下来是ArrayAdapter的使用,ListView布局文件与上面一致,除了没有entries参数,因为是使用adapter,MainActivity.java代码如下

public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView list1 = (ListView) findViewById(R.id.list1);
String arr1[] = { "111", "222" ,"333" };
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>
(this, R.layout.array_item, arr1);
list1.setAdapter(adapter1);
}
}

以上代码创建了一个ArrayAdapter并为它配置了几个参数,其中arr1很明显就是创建的那个数组里的数据,
而R.layout.array_item是ListView里的数据的样式,array_item的内容如下

<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/TextView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:padding="10px"
android:shadowColor="#f0f"
android:shadowDx="4"
android:shadowDy="4"
android:shadowRadius="2"
/>

这个文件里只有一个TextView,而TextView里并未设置内容android:text,而是设置了一堆样式,比如字体大小,阴影之类的
这样在app运行后看到的ListView里的数据的样式就与这个TextView里的一致。

ListActivity的使用
让Activity直接继承ListActivity,这样无需布局界面就可以得到一个列表的界面,代码如下

public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String arr[] = { "111", "222" ,"333" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this, R.layout.support_simple_spinner_dropdown_item, arr);
setListAdapter(adapter);
}
}

可以看到以上代码中没有setContentView方法,也就是没有使用布局界面,因为ListActivity本身就是一个列表型的界面

ArrayAdapter的每个列表项只能是TextView,接下来使用可以自定义的BaseAdapter
布局文件只有一个ListView,并且只进行了简单的设置

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

Java代码如下

public class MainActivity extends Activity {
ListView myList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList = (ListView) findViewById(R.id.mylist);
BaseAdapter adapter = new BaseAdapter() {
@Override
public int getCount() {
return 40;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout line = new LinearLayout(MainActivity.this);
line.setOrientation(LinearLayout.HORIZONTAL);
ImageView image = new ImageView(MainActivity.this);
image.setImageResource(R.mipmap.ic_launcher);
TextView text = new TextView(MainActivity.this);
text.setText("第" +(position +1 )+"个列表项" );
text.setTextSize(20);
text.setHighlightColor(Color.RED);
line.addView(image);
line.addView(text);
return line;
}
};
myList.setAdapter(adapter);
}
}

BaseAdapter提供了几个方法来改变列表的显示,比如getCount方法表示数量,getView方法为列表设置了样式

接下来是一个可以展开的列表组件,ExpandableListView,一个ExpandableListView组件的参数没有太多,这里不给出
布局文件的代码,下面是Java文件的代码

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ExpandableListAdapter adapter = new BaseExpandableListAdapter() {
int[] logos = new int[]{
R.mipmap.ic_launcher,
R.mipmap.ic_launcher,
R.mipmap.ic_launcher
};
private String[] armTypes = new String[]{
"1和10之间","10和20之间","20和30之间"
};
private String[][] arms = new String[][]{
{"1","2","3","4"},
{"11","12","13","14"},
{"21","22","23","24"}
}; private TextView getTextView(){
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 64);
TextView textView = new TextView(MainActivity.this);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
textView.setPadding(36,0,0,0);
textView.setTextSize(20);
return textView;
} @Override
public int getGroupCount() {
return armTypes.length;
} @Override
public int getChildrenCount(int groupPosition) {
return arms[groupPosition].length;
} @Override
public Object getGroup(int groupPosition) {
return armTypes[groupPosition];
} @Override
public Object getChild(int groupPosition, int childPosition) {
return arms[groupPosition][childPosition];
} @Override
public long getGroupId(int groupPosition) {
return groupPosition;
} @Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
} @Override
public boolean hasStableIds() {
return true;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
LinearLayout ll = new LinearLayout(MainActivity.this);
ll.setOrientation(LinearLayout.VERTICAL);
ImageView logo = new ImageView(MainActivity.this);
logo.setImageResource(logos[groupPosition]);
ll.addView(logo);
TextView textView = getTextView();
textView.setText(getGroup(groupPosition).toString());
ll.addView(textView);
return ll;
} @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = getTextView();
textView.setText(getChild(groupPosition,childPosition).toString());
return textView;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
};
ExpandableListView expandListView = (ExpandableListView) findViewById(R.id.list);
expandListView.setAdapter(adapter);
}
}

ExpandableListView的显示内容由ExpandableListAdapter接口提供,想要实现这个接口就需要扩展
BaseExpandableListAdapter。代码中可以看到BaseExpandableListAdapter有很多个方法,其中几个比较
重要的方法有:

getGroupCount(),这个方法返回的是组列表项的数量
getGroupView(), 这个方法会返回一个View,来成为组列表项的样式
getChildrenCount(),每一列展开后的列表数量
getChildView(),每一列展开后的样式

最后来看看Spinner,这是一个列表选择框,点击后会看见列表的内容,选择其中一个会显示出来
布局文件如下

    <Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

Java代码如下:

public class MainActivity extends AppCompatActivity {
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
String[] arr={"444","555","666"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.support_simple_spinner_dropdown_item, arr);
spinner.setAdapter(adapter);
}
}

spinner使用ArrayAdapter来提供列表项。

Android创建列表并为列表添加数据的更多相关文章

  1. collection 在创建迭代器后 不能在添加数据 否则会出现并发问题

    collection 在创建迭代器后 不能在添加数据 否则会出现并发问题

  2. C# 直接创建一个DataTable,并为之添加数据(自定义DataTable) 转

    DataTable dt=new DataTable("cart"); DataColumn dc1=new DataColumn("prizename",Ty ...

  3. java向文件中添加数据---手动版日志添加

    核心代码为创建多级文件夹创建 //目标文件 File file=new File(filePath); //若不存在即创建文件 if(!file.exists()) { if (!file.getPa ...

  4. oracle添加数据时主键自动增长

    CREATE TABLE STUDENT( --创建学生表  ID NUMBER(10) PRIMARY KEY,   --主键ID  SNAME VARCHAR2(20), ); 此时给学生表添加数 ...

  5. 用js写倒计时,向列表添加数据-------2017-03-21

    一.单选按钮确定提交是否可用 <input id="a" type="radio" name="a"  onclick="c ...

  6. 使用size()方法输出列表中的元素数量。需要注意的是,这个方法返回的值可能不是真实的,尤其当有线程在添加数据或者移除数据时,这个方法需要遍历整个列表来计算元素数量,而遍历过的数据可能已经改变。仅当没有任何线程修改列表时,才能保证返回的结果是准确的。

    使用size()方法输出列表中的元素数量.需要注意的是,这个方法返回的值可能不是真实的,尤其当有线程在添加数据或者移除数据时,这个方法需要遍历整个列表来计算元素数量,而遍历过的数据可能已经改变.仅当没 ...

  7. for循环将字典添加到列表中出现覆盖前面数据的问题

    出现问题: rets = [{'id':1},{"id":2},{"id":3}] context = {} context['count'] = len(re ...

  8. Android实现SQLite数据库联系人列表

    Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...

  9. Android水平(横向)翻页列表,类似水平GridVIew

    Android水平(横向)翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,效果图如下: 实现方式: 1:翻 ...

随机推荐

  1. 2018-2019-1 20189208《Linux内核原理与分析》第九周作业

    活动 main函数编译有问题,div 函数和系统中某个函数重名,浮点输出有问题,scanf也有问题 修改如下 scanf_s("%d %d", &a, &b); p ...

  2. EF优化之启动预热

    为什么Entity Framework的初始化速度慢如蜗牛呢? 对于在应用程序中定义的每个DbContext类型,在首次使用时,Entity Framework都会根据数据库中的信息在内存生成一个映射 ...

  3. Lua与C

    [前言] 对于Lua的基础总结总算告一段落了,从这篇博文开始,我们才真正的进入Lua的世界,一个无聊而又有趣的世界.来吧. Lua语言是一种嵌入式语言,它本身的威力有限:当Lua遇见了C,那它就展示了 ...

  4. 【easy】100. Same Tree

    判断两棵二叉树是否相等 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...

  5. liunx mysql 备份

    执行命令:mysqldump -uroot -p lanwei > lanwei2018-08-02.sql 出错 -bash: mysqldump: command not found 查看m ...

  6. 初识Vue

    Vue.js介绍 Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另 ...

  7. linux命令进阶

    Though unconsciously,peple are indeed moving towards their destination.Slow as the progress seen fro ...

  8. iOS关键词weak和assign的区别

    一.区别 首先说说在什么情况下使用 weak 关键字 1.ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决,比如:delegate 的代理属性. 2.自身已经对它有过一次强 ...

  9. 倒影问题(reflect:below)

    这个例子灵感来源于实现一个登录框下方的倒影: .box { width: 300px; height: 200px; border: 1px solid #1f637b; -webkit-box-re ...

  10. 不装插件,查看.rp文件

    AxShare国内平台地址:http://share.axure.org临时急用可以使用公用帐户.用户名:axure@webppd.com,密码:webppd123 上传.rp文件,点击 url 地址 ...