zoukankan      html  css  js  c++  java
  • android开发之路08(ListView&Adapter)

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

    1.ListView应用实例(这里是在java代码中操作listview对象的):

    public class MyListActivity extends ListActivity{

    //定义一个字符串数组,代表我们的数据源

    private  static final String[] COUNTRIES=new String[]{"中国","法国","美国","德国","日本","朝鲜","印度"};

     

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    //把我们需要展现的数据展现到ListView上

    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,COUNTRIES));

    //通过getListView()方法获取listview对象

    ListView lv=getListView();

    lv.setTextFilterEnabled(true);

    Log.e("MyListActivity", "listview界面产生了");

    lv.setOnItemClickListener(new OnItemClickListener() {

     

    @Override

    public void onItemClick(AdapterView<?> parent, View view,

    int position, long id) {

    //通过getText()方法获取用户选择的ListView中的选项信息

    Log.e("MyListActivity", "列表选项被点击了,看看会出现什么");

    Toast.makeText(getApplicationContext(), ((TextView)view).getText(), Toast.LENGTH_LONG).show();

    }

     

    });

    }

    }

    列表项xml文件如下:

    <?xml version="1.0" encoding="utf-8"?>

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:padding="10dp"

        android:textSize="16sp">

    </TextView>

     

    Java代码①:

    public class MyActivity 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();

    adapter=new ArrayAdapter<String>(this, R.layout.list_item, data);

    listview=(ListView) findViewById(R.id.listview);

    //将数据源通过adapter显示到listview视图上

    listview.setAdapter(adapter);

     

     

    }

    }

    Java代码②:

     

    public class MyDataSource {

     

    public MyDataSource() {

    super();

    }

     

    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;

     

    }

     

    }

     

    布局文件activity_main.xml代码:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

     

        <ListView

            android:id="@+id/listview"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:text="@string/hello_world" />

     

    </RelativeLayout>

     

    列表项list_item.xml代码:

    <?xml version="1.0" encoding="utf-8"?>

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:padding="10dp"

        android:textSize="16sp">

    </TextView>

     

    2.ListView应用实例:

    在上面的两个例子中我们用的都是ArrayAdapter(数组适配器),这个适配器显示的数据源比较单一;而SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等; 

    下面我们就来看看如何使用SimpleAdapter

    MainActivity.java

    public class MainActivity extends Activity {

    private ListView mListView;

    private SimpleAdapter mSimpleAdapter=null;

    private List<Map<String, Object>> data=null;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mListView=(ListView) findViewById(R.id.listview);

    data=new ArrayList<Map<String,Object>>();

    /**

     * setAdapter方法:

     * 第一个参数:是一个Context的对象;

     * 第二个参数:是一个集合,采用这样的形式List<Map<String, Object>>,为什么呢?

     * 这里的List<E>用来存储listview中的列表项,而List<E>集合中的每一个元素,又都有自己的特征

     * 因此我们通过用map集合代表list的元素的方式,完成了listview数据展示的多元化;

     * 第三个参数:是一个布局文件,用来展示listview的每个列表项的内容

     * 第四个参数:是我们List<Map<String, Object>>中Map<key,value>的key的数组表示;

     * 第五个参数:使我们List<Map<String, Object>>中Map<key,value>的value的数组表示;

     */

    Map<String, Object> mMap1=new HashMap<String, Object>();

    mMap1.put("title", "我是第一个功能");

    mMap1.put("icon", R.drawable.ic_launcher);

    Map<String, Object> mMap2=new HashMap<String, Object>();

    mMap2.put("title", "我是第二个功能");

    mMap2.put("icon", R.drawable.ic_launcher);

    Map<String, Object> mMap3=new HashMap<String, Object>();

    mMap3.put("title", "我是第三个功能");

    mMap3.put("icon", R.drawable.ic_launcher);

    data.add(mMap1);

    data.add(mMap2);

    data.add(mMap3);

    mListView.setAdapter(new SimpleAdapter(this, data, R.layout.list_item,

    new String[]{"title","icon"}, new int[]{R.id.tv,R.id.iv}));

    }

    }

     

    activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

     

        <ListView

            android:id="@+id/listview"

            android:layout_width="match_parent"

            android:layout_height="match_parent"/>

     

    </RelativeLayout>

    list_item.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

     

    <ImageView 

        android:id="@+id/iv"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>

    <TextView 

        android:id="@+id/tv"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>

    </LinearLayout>

     

    3.自定义适配器:android界面中有时候需要显示稍微复杂的界面时,就需要我们自己定义一个adapter,那么就要继承BaseAdapter

     

  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/smallkure/p/5282995.html
Copyright © 2011-2022 走看看