一、Adapter
安卓适配器Adapter是AdapterView视图与数据之间的桥梁。可以将较为复杂的数据处理以后绑定到目标的视图上。
以下面的例程为例,解释一下各元素之间的关系:
二、Iterator
安卓迭代器Iterator对collection进行迭代,在处理显示数据时,可用于遍历数据,配合Adapter使用效果更佳~
Iterator主要有三个基本操作(摘自JAVA中文API):
- hasNext:booleanhasNext()
如果仍有元素可以迭代,则返回 true。
- next:
返回迭代的下一个元素。
- remove:
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
三、例程
主界面:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="textchat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:text="videochat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/videochat"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/text"
android:layout_toEndOf="@+id/text" />
<Button
android:text="logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/logout"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="addfriend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/videochat"
android:layout_toRightOf="@+id/videochat"
android:id="@+id/addFriend"
android:textSize="14sp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_above="@+id/text"
android:id="@+id/chatList">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Chat List"
android:layout_width="match_parent"
android:id="@+id/chatList_ban"
android:textSize="24sp"
android:layout_height="40dp"
android:textAlignment="center"
android:textColor="@color/common_google_signin_btn_text_dark_default"
android:textStyle="normal|bold"
android:background="@android:color/holo_blue_light" />
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/chatList_view"
android:divider="@android:color/holo_blue_bright"
android:cacheColorHint="@android:color/holo_blue_bright"
android:layout_below="@+id/chatList_ban" >
</ListView>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
item界面:
<?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"> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="35dp" android:id="@+id/listItem" android:textSize="20sp" /> </LinearLayout>
主程序:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friend);
/*
将所读取的对话数据以ListView的形式显示,在View和所获取的Map之间使用了listAdapter处理数据
*/
Map<String, EMConversation> conversations = EMClient.getInstance().chatManager().getAllConversations();
//初始化ListView
listView = (ListView) findViewById(R.id.chatList_view);
listAdapt = new listAdapter(this, conversations);
listView.setAdapter(listAdapt);
...
}
适配器:
public class listAdapter extends BaseAdapter{
ArrayList<String> friendName;
ArrayList<EMConversation> conversation;
Context context;
//int position=0;
public listAdapter(Context context,Map<String,EMConversation> list){
this.context = context;
friendName=new ArrayList<>();
conversation=new ArrayList<>();
Iterator iterator= list.entrySet().iterator();
// Map类中提供entrySet(),这个方法返回Map.Entry实例化后的对象集。
// Map.Entry类中提供了一个getKey()方法和一个getValue()方法。
while(iterator.hasNext()){
Map.Entry entry=(Map.Entry)iterator.next();
Object key=entry.getKey();
Object value=entry.getValue();
friendName.add((String) key);
conversation.add((EMConversation) value);
}
}
@Override
public int getCount(){
return friendName.size();
}
@Override
public long getItemId(int position){
return position;
}
@Override
public Object getItem(int position){
return conversation.get(position);
}
@Override
public View getView(int position,View convertView,ViewGroup parent){
// position从0开始
// convertView即ListView中每一项要显示的view,这里新建了View
// parent是父窗体ListView
TextView textView;
LayoutInflater inflater = LayoutInflater.from(context);//获取主界面的视图
View view = inflater.inflate(R.layout.list_items, null);//绑定每一项的视图
textView = (TextView)view.findViewById(R.id.listItem);
textView.setText(friendName.get(position));
return view;
}
}
四、参考资料:
- http://jingyan.baidu.com/article/4f7d5712c2f80b1a2019270e.html
- http://www.javaweb.cc/help/JavaAPI1.6/overview-summary.html
一点点个人见解,若有不妥的地方欢迎指出~