生活中我们使用的apk同一个页面很多的item项布局不一样 今天就说一下如何实现图文混排 实现图文混排的也就是我们的适配器 下面我们说一个例子 我们普通的聊天窗口中就是两种不同的item项 一个在左边 一个在右边 那么我们如何实现呢 下面我们就一起走进探索
import java.text.SimpleDateFormat;
import java.util.List;
import com.lcjl.activity.R;
import com.lcjl.bean.TalkBean;
import com.lcjl.bean.TalkBean.Type;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class TalkAdapter extends BaseAdapter{
private LayoutInflater mInflater;
private List<TalkBean> mDatas;
public TalkAdapter(Context context,List<TalkBean> mDatas) {
mInflater = LayoutInflater.from(context);
this.mDatas = mDatas;
}
@Override
public int getCount() {
return mDatas.size();
}
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
TalkBean chatMessage = mDatas.get(position);
if(chatMessage.getType() == Type.INCOMING){
return 0;
}
return 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TalkBean chatMessage = mDatas.get(position);
ViewHolder vh = null;
if(convertView == null){
if(getItemViewType(position) == 0){
convertView = mInflater.inflate(R.layout.service_item, parent,false);
vh = new ViewHolder();
vh.mData = (TextView) convertView.findViewById(R.id.id_from_msg_date);
vh.mMsg = (TextView) convertView.findViewById(R.id.id_from_msg_info);
}else{
convertView = mInflater.inflate(R.layout.custom_item, parent,false);
vh = new ViewHolder();
vh.mData = (TextView) convertView.findViewById(R.id.id_to_msg_date);
vh.mMsg = (TextView) convertView.findViewById(R.id.id_to_msg_info);
}
convertView.setTag(vh);
}else{
vh = (ViewHolder) convertView.getTag();
}
//设置数据
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
vh.mData.setText(df.format(chatMessage.getDate()));
vh.mMsg.setText(chatMessage.getMessage());
return convertView;
}
private final class ViewHolder{
TextView mData;
TextView mMsg;
}
}
从上面的适配器代码中我们看到 我们的适配器中 不是只有getView getCount getItem getItemId 我们还能提供getItemViewType(); 这个方法是设定我们的item项的
getViewTypeCount() 是返回我们item项种类的个数
然后我们在下面判断加载不同的布局