• ListView普通列表控件的使用


        Android中的列表空间非常灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView、ExpandableListView和Spinner,其中Spinner就是在Windows中常见的下拉列表框。

        ListView控件用于列表的形式显示数据,ListView控件采用MVC模式将前端显示和后端数据进行分离。也就是说,ListView控件在装载数据时并不是直接使用ListView.add或者类似的方法添加数据,而是需要指定一个Adapter对象。该对象相当于MVC模式中的C(控制器,Controller)。ListView提供数据的List或数组相当于MVC模式中的M(模型,Model)在ListView控件中通过Adapter对象获得需要显示的数据,在创建Adapter对象时需要指定要显示的数据(List或数组对象),因此,要显示的数据与ListView之间通过Adapter对象进行连接,同事又互相独立,也就是说,ListView只知道显示的数据来自Adapter,并不知道这些数据来自List还是数组。

        MVC好处,MVC把应用程序的逻辑与界面是完全分开的,最大的好处是:界面设计人员可以直接参与到界面的开发,程序员就可以把精力放在逻辑层上。而不是像以前那样,设计人员把所有的材料交给开发人员,由开发人员来实现界面。在Eclipse工具中开发Android采用了更加简单的方法,设计人员在Androidraw中设计界面,以xml方式保存,在Eclipse中直接打开就可以看到设计人员的设计界面,逻辑处理的代码放在src文件夹下,让程序员更专注与业务。

    1.视图层(View):一般采用XML文件进行描述,使用的时候可以非常方便的引入。

       同时方便于后期的界面的修改。逻辑中与界面对应的id不变化则代码不用修改,大大增强了代码的可维护性。

    2.控制层(controller):Android的控制层的重任通常落在众多的Activity的肩上,这句话也就暗含了不要在Activity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Activity的响应时间是5s,如果耗时的操作放在这里,程序很容易被回收掉。

    3.模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在该层的。就是应用程序中的二进制的数据。

    一、建立工程,如图

    二、activity_main.xml中代码

    <RelativeLayout 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"
       >
    
        <ListView 
            android:id="@+id/listview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            ></ListView>
    
    </RelativeLayout>
    View Code

    三、MyDataSource.java中代码

    package com.study.listview;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MyDataSource {
    
        public MyDataSource(){
            
        }
        
        public static List<String> getDataSource(){
            List<String> list = new ArrayList<String>();
            list.add("北京");
            list.add("上海");
            list.add("广州");
            list.add("贵州");
            list.add("海南");
            list.add("重庆");
            list.add("湖南");
            return list;
        }
    }
    View Code

    四、MainActivity.java中代码

    package com.study.listview;
    
    import java.util.List;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    //ListView普通列表空间的使用
    public class MainActivity extends Activity {
    
        private ListView listView;
        private ArrayAdapter<String> adapter;
        private List<String> data = null; //表示数据源
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            data = MyDataSource.getDataSource();
            listView = (ListView)this.findViewById(R.id.listview);
            //adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,data);
            adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice,data);
            //1 adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_single_choice,data);
            //1 listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            listView.setChoiceMode(listView.CHOICE_MODE_MULTIPLE);
            listView.setAdapter(adapter);
            listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    
                @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    Toast.makeText(MainActivity.this, "arg2=" + arg2 +",arg3=" + arg3, 1).show();
                    return false;
                }
            });
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
    }
    View Code

    五、效果图

  • 相关阅读:
    小K(wifi)插座剖解
    《将博客搬至51CTO》
    超频真的不难!G3258超频4.5GHz全攻略
    触摸屏
    CAN通信(STM32)
    【 Beginning iOS 7 Development《精通iOS7开发》】05 Autorotation and Autosizing
    遇到的面试问题?都来解下
    hdu5336XYZ and Drops
    hadoop MR 任务 报错 &quot;Error: java.io.IOException: Premature EOF from inputStream at org.apache.hadoop.io&quot;
    leetcode-Subsets
  • 原文地址:https://www.cnblogs.com/kingshow123/p/listview21.html
Copyright © 2020-2023  润新知