android listview左右布局,Android ListView的多布局实现

ListView的多布局是通过重写 getItemViewType(int position)和 getViewTypeCount() 来实现的。

getItemViewType(int position):获取position位置数据的类型。

getViewTypeCount():获取共有几种类型的数据。

实现效果:

b497e3c1e62d6b1dae3f7adcc0a48560.png

我这里是通过ImageView和TextView实现了2种简单的布局,对于复杂的或者是更多的布局效果,实现方法也是类似的。

一、Activity的XML代码

二、Activity代码

public class RecentStudyActivity extends Activity {

private Listlist;

private RecentStydyAdapter adapter;

private ListView listView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_recent_study);

init();

loadData();

}

private void init() {

listView = (ListView) findViewById(R.id.listview_study);

list = new ArrayList<>();

adapter = new RecentStydyAdapter(this, list);

listView.setAdapter(adapter);

}

private void loadData() {

int[] image = {

R.mipmap.ic_today_gaokao,

R.mipmap.ic_yesterday,

R.mipmap.ic_week,

R.mipmap.ic_earlier

};

list.add(image[0]);

list.add("Android高级1");

list.add("Android高级2");

list.add("Android高级3");

list.add("Android高级4");

list.add(image[1]);

list.add("Android基础2");

list.add("Android基础3");

list.add("Android基础4");

list.add(image[2]);

list.add("Android基础1");

list.add(image[3]);

list.add("Java基础1");

list.add("Java基础2");

list.add("Java基础3");

adapter.notifyDataSetChanged();

}

}

三、适配器代码

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

import java.util.List;

public class RecentStydyAdapter extends BaseAdapter {

private Context context;

private Listlist;

public RecentStydyAdapter(Context context, Listlist) {

this.context = context;

this.list = list;

}

@Override

public int getCount() {

int ret = 0;

if (list != null) {

ret = list.size();

}

return ret;

}

@Override

public int getItemViewType(int position) {

int ret = 0;

Object object = list.get(position);

//通过数据类型的不同类来设置item的类型

if (object instanceof String) {

ret = 0;

} else if (object instanceof Integer) {

ret = 1;

}

return ret;

}

@Override

public int getViewTypeCount() {

return 2;

}

@Override

public Object getItem(int position) {

return list.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

//通过item的类型不同类来设置不同的布局

if (getItemViewType(position) == 0) {

convertView = bindTv(position, convertView, parent);

} else if (getItemViewType(position) == 1) {

convertView = bindImg(position, convertView, parent);

}

return convertView;

}

private View bindImg(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

convertView = LayoutInflater.from(context).inflate(R.layout.item_recent_img, null);

holder = new ViewHolder();

holder.img = (ImageView) convertView.findViewById(R.id.img_recent);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

Object object = list.get(position);

if (object instanceof Integer) {

int img = (int) object;

holder.img.setImageResource(img);

}

return convertView;

}

private View bindTv(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

convertView = LayoutInflater.from(context).inflate(R.layout.item_recent_tv, null);

holder = new ViewHolder();

holder.tv = (TextView) convertView.findViewById(R.id.tv_recent);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

Object object = list.get(position);

if (object instanceof String) {

String ret = (String) object;

holder.tv.setText(ret);

}

return convertView;

}

class ViewHolder {

TextView tv;

ImageView img;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值