listview点击跳转进入不同的item选项里面

安卓入门学 常用控件-简单ListView 

本文是以Android Studio为开发工具,Android权威编程为学习指导书籍
本文代码:GitHub

第一节 ListView使用

在很多App中,大家都可以看到有不少列表类的页面。如新闻列表页面。而这些页面用的大多是ListView。在这节,我们将学习Android自带的ListView控件。

为更好的学习,将使用AS创建新的工程项目。而这个项目将包含其他常用控件的学习。具体操作如下:

创建新工程-1.png
创建新工程-2.png
创建新工程-3.png
完成创建新工程.png

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. 运行后的界面

运行程序后的界面.png

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布局

这个布局是双层布局,它包含两个TextViewandroid.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改变Title.png

获取到是点击哪个Item后,我们可以对这个Item进行跳转另一个Activity操作。在此之前,对应每个界面都生成一个布局文件与java文件。同时在 AndroidManifest.xml添加新增的activity。

新创建的xml与java.png

AndroidManifest新增Activity.png

首先,在 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。

猜你喜欢

转载自blog.csdn.net/qq_42162746/article/details/80809380
今日推荐