ListView加载两种以上不同的布局

时间:2021-11-09 03:57:23

不同的项目布局(item layout)

Listview一种单一的item 布局有时候不能完全满足业务需求,我们需要加载两种或两种以上不同的布局,实现方法很简单:

  • 重写 getViewTypeCount() – 返回你有多少个不同的布局
  • 重写 getItemViewType(int) – 由position返回view type id
  • 根据view item的类型,在getView中创建正确的convertView

代码:

 public class MainActivity extends AppCompatActivity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("测试");
setSupportActionBar(toolbar); ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(new ListviewAdapter());
} class ListviewAdapter extends BaseAdapter { @Override
public int getCount() {
return 50;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
int type = getItemViewType(position);
switch (type) {
case 0:
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.listviewitem, parent, false);
TextView tv = (TextView) view.findViewById(R.id.item_tv);
tv.setText("textView" + position);
break;
case 1:
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.listviewpic, parent, false);
break;
}
return view;
} @Override
public int getViewTypeCount() {
//多少种布局
return 2;
} @Override
public int getItemViewType(int position) {
return position % 4 == 0 ? 1 : 0;
} }
}

运行效果,每三个item一个分隔图片

ListView加载两种以上不同的布局