从自定义对象的 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,这将提高应用程序的性能。
我正在构建一个 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,这将提高应用程序的性能。