安卓入门学 常用控件-简单ListView
本文是以Android Studio为开发工具,Android权威编程为学习指导书籍
本文代码:GitHub
第一节 ListView使用
在很多App中,大家都可以看到有不少列表类的页面。如新闻列表页面。而这些页面用的大多是ListView。在这节,我们将学习Android自带的ListView控件。
为更好的学习,将使用AS创建新的工程项目。而这个项目将包含其他常用控件的学习。具体操作如下:
1. 设置相关XML文件与Java源代码
打开res\layout\activity_main.xml
,修改根元素为LinearLayout
,同时加上本节要学习的控件。
<?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:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.zrthas.administrator.commoncontrol.MainActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView_fun">
</ListView>
</LinearLayout>
打开res\lvalues\strings.xml
中,将相对的XML字段修改如下:
<resources>
<string name="app_name">常用组件测试</string>
<string name="List_View">ListView演示</string>
<string name="commonControl_List">常用Android演示</string>
</resources>
最后在Java源代码中添加对ListView的调用
public class MainActivity extends AppCompatActivity {
/*
定义数组来表示listView要显示,也是我们学习哪些常用的控件
*/
private static final String[] commonFunList = new String[]{
"ListView控件演示",
"ProgressBar控件演示",
"GridView控件演示",
"ScrollView控件演示",
"DatePicker控件演示"
};
//定义listView
private ListView listView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView_fun);
listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
commonFunList));
}
}
2. 运行后的界面
3. 重要方法说明
在Java代码中,可以看到,Android对ListView的调用主要是由方法setAdapter
。具体详细介绍:Android之Adapter用法总结。目前使用只要记得,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter
的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时用setAdapter
完成适配的最后工作。
眼尖的同学可能会发现,在setAdapter
中的simple_list_item_1
。为什么我们自己设置的TextView
呢?这主要由于目前我们所使用的ListView为系统自带控件。它里面包含了simple_list_item_1、simple_list_item_2、two_line_list_item
等。现在对这几个布局进行详解。
3.1 simple_list_item_1布局
此布局是最简单的一种布局方式。只含有一个TextView
。作用于单行展示。就如我们运行后程序的列表。
3.2 simple_list_item_2布局
这个布局是双层布局,它包含两个TextView
:android.R.id.text1和android.R.id.text2
。此布局是上层为大字体,下层为小字体。
3.3 two_line_list_item布局
与simple_list_item_2
布局一致包含两个TextView
。而跟它不同的是,两层文字的大小都是一样大小的。
4. Activity页面间跳转
经过几前章的学习,可能同学们对生成一个简单的ListView顺手而来。那我们根据以前所学习的内容,对ListView中的列表内容都创建相应的页面。同时点击列表,会跳转至相应的Activity中。下面分为两步:
4.1 判断点击哪个Item
这里面我们调用setOnItemClickListener
监听器。
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setTitle("您点击了第"+position+"个项目");
}
}
);
onItemClick后面有4个参数,乍看直接晕菜,那么每个参数究竟是何意义呢.
举个例子会理解的更快:
X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item。如果你点了b这个item。如下:
arg0相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X
arg1是你点的b这个view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
arg2是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
arg3是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅
而setTitle
是将应用的标题改为当前所点击的行数。注意,是从0开始算。项目运行后如下图所示:
获取到是点击哪个Item后,我们可以对这个Item进行跳转另一个Activity操作。在此之前,对应每个界面都生成一个布局文件与java文件。同时在
AndroidManifest.xml
添加新增的activity。
首先,在
onCreate(Bundle)
前加个方法
toNewActivity(int)
。这个方法是用来判断用户点击哪个Item,由此跳转到哪个Activity。以下是简单的实现:
/*** 根据Item的position位置来判断具体跳转至哪个Activity */
private void toNewActivity(int position){
Intent i;
switch (position){
case 0:
i = new Intent(MainActivity.this,ListViewActivity.class);
break;
case 1:
i = new Intent(MainActivity.this,ProgressBarActivity.class);
break;
case 2:
i = new Intent(MainActivity.this,GridViewActivity.class);
break;
case 3:
i = new Intent(MainActivity.this,ScrollViewActivity.class);
break;
case 4:
i = new Intent(MainActivity.this,DatePickerActivity.class);
break;
default:
i = new Intent(MainActivity.this,MainActivity.class);
break;
}
startActivity(i);
}
在原来对ListView监听器中,把setTitle()
方法改成toNewActivity()
。
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
toNewActivity(position);
}
}
);
最后运行下项目,点击各个不同的Item,会跳转至不同的Activity。