//MainActivity
package com.example.mutil_item;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private MassageAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = findViewById(R.id.messages);
mAdapter = new MassageAdapter(this);
listView.setAdapter(mAdapter);
asy();
}
private void asy(){
new AsyncTask<Random,Void,List<MassageBean>>(){
@Override
protected List<MassageBean> doInBackground(Random... voids) {
List<MassageBean> result = new ArrayList<>();
//Random random = new Random();
for (int i = 0; i < 30; i++) {
result.add(new MassageBean("消息:"+i,voids[0].nextBoolean()));
}
return result;
}
@Override
protected void onPostExecute(List<MassageBean> massageBeans) {
mAdapter.setList(massageBeans);
}
}.execute(new Random());
}
}
//MassageAdapter
package com.example.mutil_item;
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.ArrayList;
import java.util.List;
public class MassageAdapter extends BaseAdapter {
private List<MassageBean> mdatas;
private Context context;
//总共有两种条目
private final int ITEM_COUNT = 2;
private final int LEFT_ITEM = 0;
private final int RIGHT_ITEM = 1;
@Override
public int getItemViewType(int position) {
if (getItem(position).isRec()){
return LEFT_ITEM;
}else {
return RIGHT_ITEM;
}
}
@Override
public int getViewTypeCount() {
return ITEM_COUNT;
}
public MassageAdapter(Context context) {
this.context = context;
mdatas =new ArrayList<>();
}
public void setList(List<MassageBean> datas){
this.mdatas = datas;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mdatas.size();
}
@Override
public MassageBean getItem(int position) {
return mdatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null){
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
getItemViewType(position) == LEFT_ITEM?R.layout.left_item:R.layout.right_item
,parent,false);
holder.massage = convertView.findViewById(R.id.massage);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.massage.setText(getItem(position).getMassage());
return convertView;
}
class ViewHolder{
private TextView massage;
}
}
//bean
package com.example.mutil_item;
public class MassageBean {
private String massage;
private boolean isRec;
public MassageBean(String massage, boolean isRec) {
this.massage = massage;
this.isRec = isRec;
}
public String getMassage() { return massage; }
public void setMassage(String massage) {
this.massage = massage;
}
public boolean isRec() {
return isRec;
}
public void setRec(boolean rec) {
isRec = rec;
}
}