当在一个listView中需要几个风格不一样的条目时,就属于多条目加载,多条目加载比较简单,就是在ListView的Adapter中实现两个函数,分别是 public int getViewTypeCount() {} public int getItemViewType(int position) {},然后在getView函数中通过判断getItemViewType函数的返回值,来实现不同的View即可。具体代码如下
public class MainActivity extends AppCompatActivity {
private ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = findViewById(R.id.listView);
list = new ArrayList<>();
for (int i = 0;i<10;i++){
list.add("Linhan"+i);
}
listView.setAdapter(new BaseAdapter() {//偷个懒,没实现自己的Adapter,直接实现一个BaseAdapter
final int TYPE_1=0;//定义两个常亮
final int TYPE_2=1;
@Override
public int getViewTypeCount() {//指定我们有多少个布局,也就是我们有多少个视图
return 2;
}
@Override
public int getItemViewType(int position) {//指定我们想要实现的布局类型
if (position%2==0){//当条目位置为0、2、4、6、...时,我们实现布局1
return TYPE_1;
}else {//当条目位置为1、3、5、7、...时,我们实现布局2
return TYPE_2;
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int type = getItemViewType(i);
switch (type){
case TYPE_1://实现布局为item1的view
view = View.inflate(MainActivity.this,R.layout.item1,null);
break;
case TYPE_2://实现布局为item2的view
view = View.inflate(MainActivity.this,R.layout.item2,null);
break;
}
return view;
}
});
}
}
网友评论