ListView配合安卓适配器Adapter和迭代器Iterator的用法整理

一、Adapter

安卓适配器Adapter是AdapterView视图与数据之间的桥梁。可以将较为复杂的数据处理以后绑定到目标的视图上。

以下面的例程为例,解释一下各元素之间的关系:

SiDong


二、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

一点点个人见解,若有不妥的地方欢迎指出~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Delphi中,可以使用TListView组件来显示数据,并通过TAdapterBindSource和TAdapterListViewAdapter来实现数据的绑定和显示。下面是一个简单的示例代码: ```delphi unit MainForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.Bind.GenData, Data.Bind.EngExt, Vcl.Bind.DBEngExt, System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Vcl.Grids, Data.Bind.ObjectScope, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Bind.Navigator; type TForm1 = class(TForm) ListView1: TListView; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private FPersonList: TObjectList<TPerson>; procedure LoadData; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses System.Generics.Collections; type TPerson = class FirstName: string; LastName: string; Age: Integer; end; procedure TForm1.FormCreate(Sender: TObject); begin FPersonList := TObjectList<TPerson>.Create; end; procedure TForm1.Button1Click(Sender: TObject); begin LoadData; ListView1.Items.Clear; ListView1.ItemAppearanceObjects.ItemObjects.Text.Text := 'FirstName'; ListView1.ItemAppearanceObjects.ItemObjects.Detail.Text := 'LastName'; ListView1.ItemAppearanceObjects.ItemObjects.Accessory.Text := 'Age'; ListView1.Adapter := TListBindSourceAdapter<TPerson>.Create(Self, FPersonList); end; procedure TForm1.LoadData; var Person: TPerson; begin Person := TPerson.Create; Person.FirstName := 'John'; Person.LastName := 'Doe'; Person.Age := 25; FPersonList.Add(Person); Person := TPerson.Create; Person.FirstName := 'Jane'; Person.LastName := 'Smith'; Person.Age := 30; FPersonList.Add(Person); end; end. ``` 在上述代码中,首先在FormCreate事件中创建了一个TObjectList<TPerson>对象,用于存储要显示的数据。在Button1Click事件中,通过LoadData方法加载数据,并将数据绑定到ListView上。 在ListView的ItemAppearanceObjects属性中,设置了各个子项的显示内容,例如Text.Text对应FirstName,Detail.Text对应LastName,Accessory.Text对应Age。 最后,使用TListBindSourceAdapter<TPerson>类来创建适配器,并将其赋值给ListViewAdapter属性,即可实现数据的绑定和显示。 请注意,在使用TAdapterBindSource和TAdapterListViewAdapter时,需要在uses中添加Data.Bind.GenData单元,并在项目中引用LiveBindings及相关包文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值