<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java">public class MsgAdapter extends ArrayAdapter<Msg> {
private int resourceId;
public MsgAdapter(Context context,int textViewResourceId,List<Msg> objects){
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView,ViewGroup parent){
//Log.d("问题","getView " + position + " " + convertView);
Msg msg = getItem(position);
View view;
ViewHolder viewHolder;
if(convertView == null){
view = LayoutInflater.from(getContext()).inflate(resourceId,null);
viewHolder = new ViewHolder();
viewHolder.leftLayout = (LinearLayout) view.findViewById(R.id.left_layout);
viewHolder.rightLayout = (LinearLayout) view.findViewById(R.id.right_layout);
viewHolder.leftMsg = (TextView)view.findViewById(R.id.left_msg);
viewHolder.rightMsg = (TextView)view.findViewById(R.id.right_msg);
view.setTag(viewHolder);
}else{
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
if(msg.getType() == Msg.TYPE_RECEIVED){
//如果是收到的消息,则显示左边的消息布局,将右边的消息布局隐藏。
viewHolder.leftLayout.setVisibility(View.VISIBLE);
viewHolder.rightLayout.setVisibility(View.GONE);
viewHolder.leftMsg.setText(msg.getContent());
}else if(msg.getType() == Msg.TYPE_SENT){
//如果是发出的消息,则显示右边的消息布局,将左边的消息布局隐藏
viewHolder.rightLayout.setVisibility(View.VISIBLE);
viewHolder.leftLayout.setVisibility(View.GONE);//如果不设置则会出现两边显示的情况。即收到自己发出的信息。
viewHolder.rightMsg.setText(msg.getContent());
}
return view;
}
<span style="font-family: Arial, Helvetica, sans-serif;">Msg msg = getItem(position);</span>
这个函数接收的是从不可视区域进入可视区域的实例。(即listview上要显示的元素项)
<pre name="code" class="java">View convertView 这个值为安卓系统自动为我们缓存的之前加载的布局?
view.setTag(viewHolder);这个函数将我们的viewHolder打包进行保存进View中,这个view不知道怎么工作的。。。。