MainActivity布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.mrzhao.muiltlayoutdemo.MainActivity"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </LinearLayout>
MainActivity文件:
public class MainActivity extends AppCompatActivity { private List<MuiltEntity> list = new ArrayList<>(); private ListView listView; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); //列表视图 listView = (ListView) findViewById(R.id.listView); myAdapter = new MyAdapter(list, this); listView.setAdapter(myAdapter); } //初始化数据 private void initData() { for (int i = 0; i < 100; i++) { MuiltEntity muiltEntity = new MuiltEntity("张磊 精神点~!", (int) (Math.random() * 2)); list.add(muiltEntity); } }
适配器:
public class MyAdapter extends BaseAdapter { private List<MuiltEntity> list; private Context context; private LayoutInflater inflater; public MyAdapter(List<MuiltEntity> list, Context context) { this.list = list; this.context = context; inflater = LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } // 返回position位置的 类型是什么 @Override public int getItemViewType(int position) { return list.get(position).getType(); } //一共有多少种类型 @Override public int getViewTypeCount() { return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder1 holder1 = null; ViewHolder2 holder2 = null; //获取 position位置 条目的类型是什么 int type = getItemViewType(position); switch (type) { case 0: if (convertView == null) { convertView = inflater.inflate(R.layout.item1_layout, parent, false); holder1 = new ViewHolder1(); holder1.item1Tv = convertView.findViewById(R.id.item1_tv); convertView.setTag(holder1); } else { holder1 = (ViewHolder1) convertView.getTag(); } break; case 1: if (convertView == null) { convertView = inflater.inflate(R.layout.item2_layout, parent, false); holder2 = new ViewHolder2(); holder2.item2Tv = convertView.findViewById(R.id.item2_tv); convertView.setTag(holder2); } else { holder2 = (ViewHolder2) convertView.getTag(); } break; } MuiltEntity muiltEntity = list.get(position); switch (type){ case 0: holder1.item1Tv.setText(muiltEntity.getName()); break; case 1: holder2.item2Tv.setText(muiltEntity.getName()); break; } return convertView; } // 有多少种类型就 定义几个 ViewHolder static class ViewHolder1 { TextView item1Tv; } static class ViewHolder2 { TextView item2Tv; } }
实体类:
public class MuiltEntity { private String name; private int type; public MuiltEntity(String name, int type) { this.name = name; this.type = type; } @Override public String toString() { return "MuiltEntity{" + "name='" + name + '\'' + ", type=" + type + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
Item条目布局1:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item1_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:textSize="20sp" /> </LinearLayout>
Item 条目布局2:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent" > <TextView android:id="@+id/item2_tv" android:textSize="20sp" android:layout_margin="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>