zoukankan      html  css  js  c++  java
  • Android adapter适配器的使用

    说起Adapter的使用,首先想到的就是listview或各种各样的Adapter。下面我们对常用的一些Adapter进行简单的使用讲解。

    这是Adapter的关系图:

    下面的所有例子均使用同一个布局文件:

    main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <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/MyListView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
        </ListView>
    
    </LinearLayout>

    ListView之SimpleAdapter

    SimpleAdapter的构造函数是:

    public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

    参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文

    参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的getData(),类型要与上面的一致,每条项目要与from中指定条目一致

    参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id

    参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称

    参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应。

    下面是主要的代码:

    package com.topcsa.test_listview;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import android.app.Activity;
    import android.app.ActionBar;
    import android.app.Fragment;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Looper;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    import android.os.Build;
    
    public class MainActivitySimpleAdapter extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            ListView listview = (ListView) findViewById(R.id.MyListView);
            // 生成动态数组,并且转载数据
            ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
            for (int i = 0; i < 30; i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("ItemTitle", "This is Title.....");
                map.put("ItemText", "This is text.....");
                mylist.add(map);
            }
            // 生成适配器,数组===》ListItem
            SimpleAdapter mSchedule = new SimpleAdapter(this, // 没什么解释
                    mylist,// 数据来源
                    R.layout.my_listitem_simpleadapter,// ListItem的XML实现
    
                    // 动态数组与ListItem对应的子项
                    new String[] { "ItemTitle", "ItemText" },
    
                    // ListItem的XML文件里面的两个TextView ID
                    new int[] { R.id.ItemTitle, R.id.ItemText });
            // 添加并且显示
            listview.setAdapter(mSchedule);
            listview.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    
                    Intent intent = new Intent();
                    intent.putExtra("content",position);
                    intent.setClass(MainActivitySimpleAdapter.this, ContentActivitySimpleAdapter.class);
                    startActivity(intent);
                }
            });
        }
    
    }

    以下是对应的效果图:

    ListView之ArrayAdapter的使用:

    他的构造函数如下:

    其中Context为当前的环境变量,可以显示一行文字的一个布局文件,和一个List的集合,也就是数据源。布局文件可以自己写,也可以用系统的,我这里是用的系统的。自己写的布局中包含一个TextView就可以了,当然系统中也有包含一个TextView的布局文件:就是 android.R.layout.simple_expandable_list_item_1,调用这个比较方便。

    主要代码:

    package com.topcsa.test_listview;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MainActivityArrayAdapter extends Activity {
        private ListView mListView;
        private ArrayList<String> mArrayList = new ArrayList<String>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mListView = (ListView) findViewById(R.id.MyListView);
            mListView.setAdapter(new ArrayAdapter<String>(this,
                    android.R.layout.simple_expandable_list_item_1, getData()));
        }
    
        private ArrayList<String> getData() {
            mArrayList.add("测试数据1");
            mArrayList.add("测试数据2");
            mArrayList.add("测试数据3");
            mArrayList.add("测试数据4");
            mArrayList.add("测试数据5");
            mArrayList.add("测试数据6");
            return mArrayList;
        }
    
    }

    运行结果如下:

    LsitView之BaseAdapter的使用:

     BaseAdapter是需要被继承的。

    package com.topcsa.test_listview;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class MainActivityBaseAdapter extends Activity {
    
        ListView listView;
        String[] titles = { "标题1", "标题2", "标题3", "标题4" };
        String[] texts = { "文本内容A", "文本内容B", "文本内容C", "文本内容D" };
        int[] resIds = { R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            this.setTitle("BaseAdapter for ListView");
            listView = (ListView) this.findViewById(R.id.MyListView);
            listView.setAdapter(new ListViewAdapter(titles, texts, resIds));
    
        }
    
        public class ListViewAdapter extends BaseAdapter {
            View[] itemViews;
    
            public ListViewAdapter(String[] itemTitles, String[] itemTexts,
                    int[] itemImageRes) {
                itemViews = new View[itemTitles.length];
    
                for (int i = 0; i < itemViews.length; i++) {
                    itemViews[i] = makeItemView(itemTitles[i], itemTexts[i],
                            itemImageRes[i]);
                }
            }
    
            public int getCount() {
                return itemViews.length;
            }
    
            public View getItem(int position) {
                return itemViews[position];
            }
    
            public long getItemId(int position) {
                return position;
            }
    
            // LayoutInflater的作用是,把一个View的对象与XML布局文件关联并实例化。
            // View的对象实例化之后,可以通过findViewById()查找布局文件中的指定Id的组件。
            private View makeItemView(String strTitle, String strText, int resId) {
                LayoutInflater inflater = (LayoutInflater) MainActivityBaseAdapter.this
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
                // 使用View的对象itemView与R.layout.item关联
                View itemView = inflater.inflate(R.layout.my_listitem_baseadapter,
                        null);
    
                // 通过findViewById()方法实例R.layout.item内各组件
                TextView title = (TextView) itemView.findViewById(R.id.itemTitle);
                title.setText(strTitle);
                TextView text = (TextView) itemView.findViewById(R.id.itemText);
                text.setText(strText);
                ImageView image = (ImageView) itemView.findViewById(R.id.itemImage);
                image.setImageResource(resId);
    
                return itemView;
            }
    
            public View getView(int position, View convertView, ViewGroup parent) {
                if (convertView == null)
                    return itemViews[position];
                return convertView;
            }
        }
    }


    运行结果:

    LsitView之SimpleCursorAdapter的使用:(该方法已被遗弃)

    构造函数如下:

    主要代码如下:

    package com.topcsa.test_listview;
    
    import android.app.Activity;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.Contacts.People;
    import android.widget.ListView;
    import android.widget.SimpleCursorAdapter;
    
    public class MainActivitySimlpeCursorAdapter extends Activity {
    
        private ListView mListView;
        private Cursor mCursor;
        private SimpleCursorAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mListView = (ListView) findViewById(R.id.MyListView);
            mCursor = getContentResolver().query(People.CONTENT_URI, null, null,
                    null, null);
            startManagingCursor(mCursor);
            mAdapter = new SimpleCursorAdapter(
                    MainActivitySimlpeCursorAdapter.this,
                    android.R.layout.simple_expandable_list_item_1, mCursor,
                    new String[] { People.NAME }, new int[] { android.R.id.text1 });
            mListView.setAdapter(mAdapter);
        }
    }

    运行效果如下:

    Demo下载:http://download.csdn.net/detail/af74776/7844907

  • 相关阅读:
    P1093 奖学金
    华容道
    回文数
    P1654 OSU!
    Noip P1063 能量项链
    Noip 寻宝
    NOIP 2009 普及组 第三题 细胞分裂
    拦截器
    OGNL
    Struts2 配置详解
  • 原文地址:https://www.cnblogs.com/scetopcsa/p/3818956.html
Copyright © 2011-2022 走看看