** 类似聊天界面,ListView中有多种item样式效果
//实现ListView中多种item样式
public class TypeActivity extends Activity {
private ListView type_lv;
private List<TestBean> dataList;
private TypeAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_type);
initDatas();
initViews();
}
private void initDatas() {
dataList = new ArrayList<>();
for (int i = 0; i < 9; i++) {
TestBean bean = new TestBean();
bean.setTitle("标题_" + i);
bean.setContent("这是内容_" + i);
bean.setType(i % 2 == 0 ? 1 : 2);
dataList.add(bean);
}
}
private void initViews() {
this.type_lv = (ListView) findViewById(R.id.type_lv);
adapter = new TypeAdapter(this, dataList);
type_lv.setAdapter(adapter);
}
}
//对应Adapter
public class TypeAdapter extends BaseAdapter {
private Context mContext;
private List<TestBean> listDatas;
public TypeAdapter(Context mContext, List<TestBean> listDatas) {
this.mContext = mContext;
this.listDatas = listDatas;
}
@Override
public int getCount() {
return listDatas.size();
}
@Override
public Object getItem(int position) {
return listDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//根据样式设置不同的布局及数据展示
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
if (type == 1) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.test_item, null);
holder.title = (TextView) convertView.findViewById(R.id.item_title);
holder.content = (TextView) convertView.findViewById(R.id.item_content);
} else {
convertView = LayoutInflater.from(mContext).inflate(R.layout.type_item, null);
holder.title = (TextView) convertView.findViewById(R.id.type_title);
holder.content = (TextView) convertView.findViewById(R.id.type_title);
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.content.setText(listDatas.get(position).getContent());
holder.title.setText(listDatas.get(position).getTitle());
return convertView;
}
//关键方法之getViewTypeCount:获取有多少种样式
@Override
public int getViewTypeCount() {
return 2;
}
//关键方法之getItemViewType:获取item类型
@Override
public int getItemViewType(int position) {
return listDatas.get(position).getType();
}
final class ViewHolder {
TextView title;
TextView content;
}
}










