这是我最近弄的不同布局的代码 希望对你有帮助
package cn.jianguo.qinzi.view.adapter;import java.util.List;import android.content.Context;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import cn.jianguo.qinzi.R;
import cn.jianguo.qinzi.constant.Constant;
import cn.jianguo.qinzi.http.MessageHandlerList;
import cn.jianguo.qinzi.ui.NoticeActivity;
import cn.jianguo.qinzi.view.adapter.bean.NoticeData;import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;public class NoticeAdapter extends BaseAdapter {
private List<NoticeData> list;
private Context mContext;
private BitmapUtils mBitmapUtils;
private int type;//要显示的页面 0 表示消息、1 表示赞、2 表示动态、3 表示私信
private ViewHolder holder;
private SpannableString sp; public NoticeAdapter(Context context, List<NoticeData> list ,int type) {
this.list = list;
this.type = type;
this.mContext = context;
mBitmapUtils = new BitmapUtils(mContext);
} @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int position) {
return list.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
if (convertView != null) {
holder = (ViewHolder) convertView.getTag();
} else {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.notice_item, null);
ViewUtils.inject(holder, convertView);
convertView.setTag(holder);
}

if (type == 0) {
convertView = getMessage(position, convertView);
}else if (type == 1) {
convertView = getPraise(convertView, position);
}
return convertView;
} private View getPraise(View convertView,int position) {
NoticeData mData = list.get(position);
holder.user_icon.setImageResource(mData.getUser_icon());
sp = MySpannableString(mData.getUser_name().length(), mData.getUser_name()+" Praise you");
holder.item_tv.setText(sp);
holder.time_view.setText(mData.getDone_time());
holder.sharedImg.setImageResource(mData.getShared_img());

holder.notice_count.setVisibility(View.GONE);
holder.praiseLayout.setVisibility(View.GONE);
return convertView;
} private View getMessage(final int position, View convertView) {
// TODO Auto-generated method stub

final NoticeData mData = list.get(position);
if (mData.getData_type() == 1) {
holder.user_icon.setImageResource(mData.getPser_icon());
sp = MySpannableString(mData.getPser_name().length(),
mData.getPser_name() + mData.getPontent());
holder.sharedImg.setImageResource(R.drawable.bb);
holder.time_view.setText(mData.getPreated_time());
holder.item_tv.setText(sp);
}
if (mData.getData_type() == 2) {
holder.user_icon.setImageResource(mData.getUser_icon());
sp = MySpannableString(mData.getUser_name().length(),
mData.getUser_name() + "  Follow you");
holder.time_view.setText(mData.getDone_time());
if (mData.getFollowed().equals("1")
&& mData.getFollow().equals("1")) {
holder.sharedImg.setImageResource(R.drawable.g22x);
holder.sharedImg.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if (mData.getFollow().equals("1")) {
list.get(position).setFollow("0");
} else {
list.get(position).setFollow("1");
}
MessageHandlerList.sendMessage(NoticeActivity.class, Constant.HANDLER_MSG_WHAT_0);
}
});
} else {
holder.sharedImg.setImageResource(R.drawable.g12x);
holder.sharedImg.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if (mData.getFollow().equals("1")) {
list.get(position).setFollow("0");
} else {
list.get(position).setFollow("1");
}
MessageHandlerList.sendMessage(NoticeActivity.class, Constant.HANDLER_MSG_WHAT_0);
}
});
}
holder.item_tv.setText(sp);
}
holder.notice_count.setVisibility(View.GONE);
holder.praiseLayout.setVisibility(View.GONE);
return convertView;
}
class ViewHolder {
@ViewInject(R.id.item_iv)
private ImageView user_icon;// 用户头像
@ViewInject(R.id.item_tv)
private TextView item_tv;// 发布内容
@ViewInject(R.id.notice_count)
private TextView notice_count;// 私信显示条数
@ViewInject(R.id.notice_textView1)
private TextView time_view;// 发布时间
@ViewInject(R.id.item_praise_layout)
private LinearLayout praiseLayout;// 点赞用户头像布局
@ViewInject(R.id.item_image)
private ImageView sharedImg;// 分享图片 }
private SpannableString MySpannableString(int startlength, String str) {
sp = new SpannableString(str);
sp.setSpan(new ForegroundColorSpan(Color.BLACK), 0, startlength,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return sp;
}
}

解决方案 »

  1.   


    如果要这个效果 自定义listView吧
      

  2.   

    你这是数组越界导致的错误。length =2, index=2
      

  3.   

    问题已解决这里说明一下错误原因getViewTypeCount这个方法返回总布局数量  getItemViewType  返回int类型 表示布局类型序号 这里就需要注意了  布局数量=2而getItemViewType  则就不能返回2 只能返回0或者1 因为上面getViewTypeCount已经设置了布局的个数了所以会出现错误虽然大家没有解决问题,还是非常感谢大家