Android Adapter的一些记录

一、摘要

  An Adapter object acts as a bridge between an AdapterView and
the underlying data for that view. The Adapter provides access to the data
items. The Adapter is also responsible for making a View for
each item in the data set.

  这是Android官方对Adapter的定义。这个关系可以描述为下面一个关系图,

  

二、Adapter的继承关系

   

三,样例

  这里附上北航《Android编程宝典》的一个例子,搭配ListView说明Adapter怎么样去扮演这个中间人,为View层提供数据。

  1,定义3个layout文件,分别是activity_main.xml,fragment_main.xml,my_listitem.xml。

  activity_main.xml


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="so.byj.example.mytestapp.MainActivity"
tools:ignore="MergeRootFrame" />

  fragment_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout01"
android:baselineAligned="false"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

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

</LinearLayout>

  my_listitem.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myListItem"
android:paddingBottom="3dip"
android:paddingLeft="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView android:id="@+id/itemTitle"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textSize="30sp" />

<TextView android:id="@+id/itemText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>

</LinearLayout>

  2,编写MainActivity,代码如下


package so.byj.example.mytestapp;

import java.util.ArrayList;
import java.util.HashMap;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.SimpleAdapter;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_main, container, false);

ListView list = (ListView) rootView.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);
}

SimpleAdapter mSchedule = new SimpleAdapter(getActivity(),
mylist,
R.layout.my_listitem, // 这里定义了数据填充的样式
new String[] {"ItemTitle", "ItemText"},
new int[] {R.id.itemTitle,R.id.itemText});

list.setAdapter(mSchedule);

return rootView;
}
}

}

  如上面黑体部分,先把待填充数据的ListView拿出来,然后实例一个Adapter对ListView进行数据填充。

Android Adapter的一些记录

时间: 2024-11-05 06:44:49

Android Adapter的一些记录的相关文章

android布局常用属性记录

android布局常用属性记录 27. 三 / android基础 / 没有评论 http://blog.csdn.net/xn4545945/article/details/7717086这里有一部分别人总结的其余的: align:对齐 parent:容器 bottom:底部 alignparentbottom:是否显示在容器底部. 值为true 或者 false android:layout_alignParentBottom=”true” android:gravity=”top” htt

Android Adapter详解

Android Adapter Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView, GridView, Gallery.而android 提供了几种Adapter:ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter

Android 笔记之错误记录

前言--好记性不如烂笔头,记录Android学习过程中遇到的各种问题BUG.O(∩_∩)O 错误1 -- Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 错误原因--一般是int 型数据赋给String ,然后让TextView显示就会出现如上错误. 解决办法--用String.valueOf 或者在int数据后加"" 错误2-- 在布局文件中,文本的设置使用如下写法

[项目总结]论Android Adapter notifyDataSetChanged与notifyDataSetInvalidated无效原因

最近在开发中遇到一个问题,Adapter中使用notifyDataSetChanged 与notifyDataSetInvalidated无效,经过思考和网上查找,得出如下原因. 首先看一下notifyDataSetChanged与notifyDataSetInvalidated的区别 我们可应用粮仓来解释一下,两者的区别. notifyDataSetChanged:粮仓中得粮食少了,或者多了,发送通知. notifyDataSetInvalidated:粮仓变换了,比如原来从A仓取粮食,现在换

Android——Adapter

Android——Adapter 基本概念 Adapter(适配器),将一个类的接口变换成客户端所期待的一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.显然Adapter的存在就是为了配合两个不同部分之间的互相协作,使之能够协调工作.在Android中,Adapter是前台UI与底层数据之间联系的纽带,它们之间的关系可表示如下图. 常用Adapter Adapter本身只是一个接口,它派生了ListAdapter和SpinnerAdapter两个子接口,其中ListAda

【工作记录】android手势事件操作记录

/* 用户按下触摸屏.快速移动后松开 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //参数解释: // e1:第1个ACTION_DOWN MotionEvent // e2:最后一个ACTION_MOVE MotionEvent // velocityX:X轴上的移动速度,像素/秒 // velocityY:Y轴上的移动速度,像素/秒 // 触发条件 : /

Android adapter适配器的使用

ListView之SimpleAdapter SimpleAdapter的构造函数是: public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 参数context:上下文,比如this.关联SimpleAdapter运行的视图上下文 参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的ge

Android开发环境搭建记录201408

目的是采用android + ndk(JNI),使用c/c++编译生成opencv的相关函数的库. 默认jdk已安装好,JAVA_HOME, CLASSPATH, path已设置好.android开发的IDE有两种,Eclipse和Android Studio(http://developer.android.com/sdk/installing/studio.html),后者采用的gradle工具不了解,暂时就不试了. 1. Eclipse CDT + Cygwin环境 Eclipse c/c

Android 访问权限设置记录-存档留着有用!

Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: <uses-permission android:name=”android.permission.INTERNET”></uses-permission> 同样的如果用到其它的权限,也需要作出声明,部分权限列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问”properties”表在 chec