Android创建列表并为列表添加数据
在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创建列表并为列表添加数据的更多相关文章
- collection 在创建迭代器后 不能在添加数据 否则会出现并发问题
collection 在创建迭代器后 不能在添加数据 否则会出现并发问题
- C# 直接创建一个DataTable,并为之添加数据(自定义DataTable) 转
DataTable dt=new DataTable("cart"); DataColumn dc1=new DataColumn("prizename",Ty ...
- java向文件中添加数据---手动版日志添加
核心代码为创建多级文件夹创建 //目标文件 File file=new File(filePath); //若不存在即创建文件 if(!file.exists()) { if (!file.getPa ...
- oracle添加数据时主键自动增长
CREATE TABLE STUDENT( --创建学生表 ID NUMBER(10) PRIMARY KEY, --主键ID SNAME VARCHAR2(20), ); 此时给学生表添加数 ...
- 用js写倒计时,向列表添加数据-------2017-03-21
一.单选按钮确定提交是否可用 <input id="a" type="radio" name="a" onclick="c ...
- 使用size()方法输出列表中的元素数量。需要注意的是,这个方法返回的值可能不是真实的,尤其当有线程在添加数据或者移除数据时,这个方法需要遍历整个列表来计算元素数量,而遍历过的数据可能已经改变。仅当没有任何线程修改列表时,才能保证返回的结果是准确的。
使用size()方法输出列表中的元素数量.需要注意的是,这个方法返回的值可能不是真实的,尤其当有线程在添加数据或者移除数据时,这个方法需要遍历整个列表来计算元素数量,而遍历过的数据可能已经改变.仅当没 ...
- for循环将字典添加到列表中出现覆盖前面数据的问题
出现问题: rets = [{'id':1},{"id":2},{"id":3}] context = {} context['count'] = len(re ...
- Android实现SQLite数据库联系人列表
Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...
- Android水平(横向)翻页列表,类似水平GridVIew
Android水平(横向)翻页列表,类似于水平方向的GridView,行列自定义,但要翻页切换,考虑加载性能,当Item数据很多时加载和翻页要流畅,翻页时要有动画效果,效果图如下: 实现方式: 1:翻 ...
随机推荐
- php exit die的区别
exit 输出一个消息并且退出当前脚本 void exit([string $status]) void exit(int $status)中止脚本的执行.尽管调用了exit(),Shutdow函数以 ...
- Linux什么是挂载?mount的用处在哪?
关于挂载的作用一直不是很清楚,今天在阅读教材时看见了mount这个命令,发现它的用处很隐晦但非常强大.奈何教材说的不明朗,因此在网上整合了一些优秀的解释,看完之后豁然开朗. 1.提一句Windows下 ...
- Python的单例模式
一.何为单例模式 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某个类只有一个实例的途径: 1.让一个全局变量使得一个对象被访问,但是他不能防止外部实例化多个对象. 2.让类自 ...
- Python学习笔记十
守护进程 p.daemon=True 必须在p.start()之前设置. 守护进程内不能再开子进程. 在主进程中开启守护进程(就是一个子进程) 什么时候应该把子进程设置为守护进程? 开子进程的目的:就 ...
- memcached笔记
启动memcached:./memcached -d -m 10 -l 127.0.0.1 -p 11211 -u root 连接memcached:telnet 127.0.0.1 11211 查看 ...
- ASP.NET 多环境下配置文件web.config的灵活配置
调试,发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等.如果常常有调试,发布的需求,就需要常常修改web.config文件,这往往 ...
- spring Boot异步操作报错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.self.spring.springboot.Jeep' available
我也是最近开始学习Spring Boot,在执行异步操作的时候总是汇报如下的错误: Exception in thread "main" org.springframework.b ...
- 多线程下载图片,同步下载http://www.importnew.com/15731.html
package mutiDownload; import java.io.IOException; import java.io.InputStream; import java.io.RandomA ...
- 虚拟机Oracle VM VirtualBox linux系统如何访问windows共享文件夹
1. 在本机系统设置一个共享文件夹,用于与Ubuntu交互的区域空间. 2.右击状态栏上共享文件夹图标或菜单栏“设备-共享文件夹”,打开共享文件夹设置,如图示 3.点击共享文件夹设置框,右 ...
- 第三篇 request篇
每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...