从自定义对象的 Arraylist 创建一个 BaseAdapter

Create a BaseAdapter from Arraylist of custom object

我正在构建一个 SMS 应用程序并在列表视图中显示对话流量。 我的数据将注册在消息的 ArrayList 中,class 我已经为我的应用程序引用 SMS 消息项目。

出于测试目的,我制作了这个适配器:

package fr.nf.smsplus;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Nicolas on 20/05/2016.
 */
public class conversationAdapter extends BaseAdapter {

    Context context;
    Message[] conv;
    private static LayoutInflater inflater = null;

    public conversationAdapter(Context context, Message[] conv) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.conv = conv;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return conv.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return conv[position];
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View vi = convertView;
        if (vi == null)
            vi = inflater.inflate(R.layout.item_bubble_me, null);
        TextView text = (TextView) vi.findViewById(R.id.txtMsg);
        text.setText(conv[position].content);
        return vi;
    }

}

这是我所做的输出:

我的适配器工作正常。但是我现在需要 select 在我的适配器的 getView 中使用哪个气泡,所以 我不能使用 ArrayAdapter。我将不得不制作自己的适配器。

所以我需要将所有内容转换为消息的 ArrayList 而不是 Array,以便为数组动态分配资源。

我如何修改我的适配器以正确使用 ArrayList of Message 以在列表视图中应用它?

package fr.nf.smsplus;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Nicolas on 20/05/2016.
 */
public class conversationAdapter extends BaseAdapter {

    Context context;
    ArrayList<Message> conv;
    private static LayoutInflater inflater = null;

    public conversationAdapter(Context context, ArrayList<Message> conv) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.conv = conv;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return conv.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return conv.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Message mMessage=conv.get(position);
        View vi = convertView;
        if (vi == null)
            vi = inflater.inflate(R.layout.item_bubble_me, null);
        TextView text = (TextView) vi.findViewById(R.id.txtMsg);
        text.setText(mMessage.content);
        return vi;
    }
}

注意:尝试使用 ViewHolder,这将提高应用程序的性能。