Adapter

适配器:数据和UI(view)的纽带

我的想法,当你看新闻的时候,不停的向下拉,感觉是无止尽的,如果单靠布局文件里面静态、手动填写是不可能实现的。Android中有几个控件是动态增加的,例如ListView,即视图列表,再加上Adapter,拥有专门修改这种控件内容的功能,通过适配器就实现了动态修改视图控件的能力

实例1:只展示一串字符串
1.定义列表视图ListView

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/newsList">
    </ListView>

2.定义适配器ArrayAdapter
ArrayAdapter
Returns a view for each object in a collection of data objects you provide 返回你提供的数据对象集中的每一个对象的视图
大意是:你提供的数据,适配器用数据修改视图,在视图上展示,返回视图。提供的每一个数据都是这样进行的

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //声明赋值我们要传给ListView列表视图的数据
        String[] sl = new String[]{"list1", "list2","list3"};    
        //引入列表视图对象
        ListView listView = (ListView)findViewById(R.id.newsList);
       // 给列表视图对象设置一个适配器,传入一个适配器对象,动态更改视图的内容
      //这个适配器对象传入三个参数,上下文、第二个是ListView的子视图,
       //即单个格子、数据集。也就是动态将每个数据写进列表的单个格子中
        listView.setAdapter(new ArrayAdapter<String>(
                          this, android.R.layout.simple_list_item_1,sl));
    }

实例2:给ListView视图列表传入自定义对象,让列表的功能更丰富
一个列表视图ListView是由无数子视图构成,所以我们先构建一个子视图
newlistitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/newsTitle"
        android:singleLine="true"    //只显示一行
        android:ellipsize="end"     //长度过长,从尾部缩略
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        />
</LinearLayout>

然后是用子视图构成的列表视图ListView
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/newslist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

然后新建新闻类news,用来填充内容到列表视图的子视图中
news.java

public class news {
    public String title;
    public String content;
    public void settitle(String tile){
        this.title = tile;
    }
    public void setcontent(String content){
        this.content = content;
    }
    public String getTitle(){
        return title;
    }
    public String getContent(){
        return content;
    }
}

接着,创建一个新闻类的适配器,将每一条新闻对象送入视图列表中
newsAdapter.java

public class newsAdapter extends ArrayAdapter<news> {

    private int resourceId;
    // 构造方法,用于接下来初始化,传入新闻对象
    public newsAdapter(@NonNull Context context, int resource, List<news> objects) {
        super(context, resource, objects);
        resourceId = resource;
    }
    //每当滑动列表时,被划入到屏幕内的列表子项调用这个方法来填充视图内容
    public View getView(int position, View convertView, ViewGroup parent) {
        //根据光标所在的位置(类似于列表中的索引),获取(新闻)对象列表中的具体对象
        news siglenew = getItem(position);
        //用传入的视图去填充视图列表的子项,返回这个列表子项的视图对象
        View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        //获取列表子项视图的内容对象并将新闻对象的内容,填充进去
        TextView siglenewstitle = (TextView)view.findViewById(R.id.newsTitle);
        siglenewstitle.setText(siglenew.getTitle());
        return view;
    };
}

接下来就是定义很多条新闻(对象),放进一个新闻适配器对象中,将这个适配器对象给视图列表ListView
MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //视图列表对象
        ListView listView = (ListView)findViewById(R.id.newslist);
        //初始化新闻对象,并放入新闻列表中
        news news1 = new news();
        news1.settitle("第一条新闻");
        news news2 = new news();
        news2.settitle("第二条新闻");
        List<news> newslist = new ArrayList<news>();
        newslist.add(news1);
        newslist.add(news2);
        //将新闻列表、视图模板放入适配器,设置好一旦列表子项滑入界面,就将新闻内容填充进视图模板,组成一个子视图返回显示
        newsAdapter newsadapter = new newsAdapter(this, R.layout.layout_fragment_newstile, newslist);
        listView.setAdapter(newsadapter);
    }

https://www.cnblogs.com/devinzhang/archive/2012/01/20/2328334.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,171评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,732评论 2 59
  • 昨天,他爹第一次主动邀约今天全家看电影,说实话挺意外的,我说牙疼你爷俩去吧,星宇第一个反对:“不行,都去多...
    8e85c4bb5214阅读 202评论 0 1
  • 我骑着电车看着南面的门市。孩子的学习机充电器找不到了,我想给她再买一个。街道很宽,车流很大,显着拥挤。四周的大厦,...
    问芯阅读 345评论 8 7
  • #Week2# The reading task of today is Chapter Five The Pro...
    泥巴叔叔阅读 258评论 0 0