Android小知识——一个界面有多个listView

原创 2016年05月30日 11:56:33

首先,你有多少个listview,如果样式不一样就要写不一样的item,在Adapter里面定义一个itemtype类型,给每一个listview都设置一个type,当要调用哪一个item的时候,直接用type判断就可以了。以下就是Adapter里面的代码,仅供参考:

import java.util.Calendar;

import java.util.List;


import com.canxing.android.venus.internships.R;

import com.canxing.android.venus.internships.sign.KCalendar;

import com.canxing.android.venus.internships.sign.KCalendar.OnCalendarDateChangedListener;

import com.canxing.android.venus.internships.utils.GetTimeUtil;


import android.content.Context;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

import android.widget.BaseAdapter;

import android.widget.TextView;


public class SignAllParentAdapter extends BaseAdapter {

private List<UnitSignInfo>infos;

private ContextmContext;

private LayoutInflaterminflater;

private String[]day;

private Stringsum_SignDays;

private Stringdate= null; // 设置默认选中的日期


public SignAllParentAdapter(List<UnitSignInfo> infos, Context mContext, String[] day, String sum_SignDays) {

this.minflater = LayoutInflater.from(mContext);

this.infos = infos;

this.mContext = mContext;

this.day = day;

this.sum_SignDays = sum_SignDays;

}


@Override

public int getCount() {

// TODO Auto-generated method stub

return infos.size() + 1;

}

public void updateData(List<UnitSignInfo> infos, String[] day, String sum_SignDays) {

this.infos = infos;

this.day = day;

this.sum_SignDays = sum_SignDays;

notifyDataSetChanged();

}

@Override

public int getItemViewType(int position) {

if (position == 0)

return 0;

else

return 1;

}


@Override

public Object getItem(int position) {

return infos.get(position);

}


@Override

public int getViewTypeCount() {

return 2;

}


@Override

public long getItemId(int position) {

return position;

}


ViewHolderTop viewtop = null;


@Override

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

ViewHolderone view = null;

//ViewHolderTop viewtop = null;

int type = getItemViewType(position);

if (convertView == null) {

switch (type) {

case 0 :

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_parent_top, null);

viewtop = new ViewHolderTop();

viewtop.pre_tv = (TextView) convertView.findViewById(R.id.pre_tv);

viewtop.mouth_tv = (TextView) convertView.findViewById(R.id.mouth_tv);

viewtop.next_tv = (TextView) convertView.findViewById(R.id.next_tv);

viewtop.count_tv = (TextView) convertView.findViewById(R.id.count_tv);

viewtop.signed_tv = (TextView) convertView.findViewById(R.id.signed_tv);

viewtop.popupwindow_calendar = (KCalendar) convertView.findViewById(R.id.popupwindow_calendar);

convertView.setTag(viewtop);

break;

case 1 :

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_sign_listview, null);

view = new ViewHolderone();

view.company_name_tv = (TextView) convertView.findViewById(R.id.company_name_tv);

view.company_time_tv = (TextView) convertView.findViewById(R.id.company_time_tv);


convertView.setTag(view);

break;

}


} else {

switch (type) {

case 0 :

viewtop = (ViewHolderTop) convertView.getTag();

break;

case 1 :

view = (ViewHolderone) convertView.getTag();

break;

}


}

//final ViewHolderTop viewtop2 = viewtop;

// 设置资源

switch (type) {

case 0 :


viewtop.count_tv.setText("总签到" + sum_SignDays + "天");

if (day != null) {

viewtop.mouth_tv.setText(viewtop.popupwindow_calendar.getCalendarYear() + "年" + viewtop.popupwindow_calendar.getCalendarMonth() + "月");


if (null != date) {

int years = Integer.parseInt(date.substring(0, date.indexOf("-")));

int month1 = Integer.parseInt(date.substring(date.indexOf("-") + 1, date.lastIndexOf("-")));

viewtop.mouth_tv.setText(years + "年" + month1 + "月");


viewtop.popupwindow_calendar.showCalendar(years, month1);

viewtop.popupwindow_calendar.setCalendarDayBgColor(date, R.drawable.calendar_date_focused);

}


final Calendar c = Calendar.getInstance();

int year = c.get(Calendar.YEAR);

int month = c.get(Calendar.MONTH) + 1;// 获取当前月份

String monthStr;

if (month < 10) {

monthStr = "0" + month;

} else {

monthStr = month + "";

}

String dateFormat;

for (int i = 0; i < day.length; i++) {

Log.e("###", "days" + day.length + year + monthStr);

if (Integer.parseInt(day[i]) < 10) {

dateFormat = year + "-" + monthStr + "-" + "0" + day[i];

} else {

dateFormat = year + "-" + monthStr + "-" + day[i];

}

Log.e("###%%%", "format:" + dateFormat);

viewtop.popupwindow_calendar.setCalendarDayBgColor(dateFormat, R.drawable.calendar_date_focused);

}

}

// 监听当前月份

viewtop.popupwindow_calendar.setOnCalendarDateChangedListener(new OnCalendarDateChangedListener() {

public void onCalendarDateChanged(int year, int month) {

viewtop.mouth_tv.setText(viewtop.popupwindow_calendar.getCalendarYear() + "年" + viewtop.popupwindow_calendar.getCalendarMonth() + "月");

}

});


// 上月监听按钮


viewtop.pre_tv.setOnClickListener(new OnClickListener() {


public void onClick(View v) {

viewtop.popupwindow_calendar.lastMonth();

}


});

// 下月监听按钮

viewtop.next_tv.setOnClickListener(new OnClickListener() {


public void onClick(View v) {

viewtop.popupwindow_calendar.nextMonth();

}

});


break;

case 1 :

UnitSignInfo info = infos.get(position-1);

view.company_name_tv.setText(info.getCompanyname());

if (info.getEndtime() == null && info.getEndtime() == "") {

String start = GetTimeUtil.getTime(Integer.parseInt(info.getStarttime()));

view.company_time_tv.setText(start + "-今天");

} else {

String start = GetTimeUtil.getTime(Integer.parseInt(info.getStarttime()));

String end = GetTimeUtil.getTime(Integer.parseInt(info.getEndtime()));

view.company_time_tv.setText(start + "-" + end);

}

break;

}


return convertView;

}


static class ViewHolderone {

TextViewcompany_name_tv;

TextViewcompany_time_tv;

}

static class ViewHolderTop {

TextViewpre_tv;

TextViewmouth_tv;

TextViewnext_tv;

TextViewcount_tv;

TextViewsigned_tv;

KCalendarpopupwindow_calendar;

}

}


一个Activity中多个ListView的整体滑动

实现一个Activity中多个ListView的整体上下滑动效果,每个ListView分别使用一个自定义的适配器,效果图如下: 工程代码下载地址:ListView整体滑动...
  • lotusyangjun
  • lotusyangjun
  • 2015年05月08日 17:24
  • 1106

一个页面上出现多个listView

当一个页面上出现多个listView,且需要动态添加数据时,需要在每次添加完数据后,测量listview的高度,否则,只显示一个item。 或者当ScrollView和listView混用时,也会只...
  • qq_34203494
  • qq_34203494
  • 2017年05月27日 17:28
  • 271

android下activity中多个listview只允许主界面滚动

之前发现了自己的APP在处理两个listview时产生的一个bug。当两个listview中的item数量多出手机屏幕时,listview不能显示完全。一开始觉得只要加一个scrollview就可以了...
  • long71751380
  • long71751380
  • 2013年10月08日 15:57
  • 1590

ListView实现多种item布局的方法和注意事项

这篇文章的效果也是大家常见的,各种通讯应用的对话列表都是这种方式,像微信、whatsapp、易信、米聊等。我们这篇文章也权当为回忆,形成简单的笔记。这篇文章参考了2009年Google IO中的《Tu...
  • u014651216
  • u014651216
  • 2016年02月29日 12:18
  • 1305

android 一个页面内 多个listview的实现滑动显示

解决:多个listview显示时,如果第一个listview条数过多,不能显示后面几个listview的内容 使用到了Adapter、重载 重写listview的onMeasure方法...
  • liangzhuangdongtou
  • liangzhuangdongtou
  • 2016年03月16日 15:57
  • 439

ListView中每个item中定时器

直接上源码: package com.example.myviewpager.daojishi; import java.util.ArrayList; import java.util...
  • qq_24349695
  • qq_24349695
  • 2017年08月16日 16:58
  • 285

Android两个ListView共用一个万能的BaseAdapter

Android两个ListView共用一个万能的BaseAdapter升级之前的MyAdapter.javapackage run.yang.com.listviewactivedemo;import...
  • xyzz609
  • xyzz609
  • 2016年07月15日 10:27
  • 3223

Android 一个ListView添加多个Adapter

有时候我们想在listView上分类,或者呢 有时候一行显示两列内容,有时候需要三列内容 ,那怎么实现呢,这里呢就要使用 Java代码   class Section { Stri...
  • YaphetZhao
  • YaphetZhao
  • 2015年09月22日 09:53
  • 1510

UIController中有多个UICollectionView可能会出现的问题

一个页面中使用了四个类似的UICollectionView,这四个View是在代码中建立的。于是就使用了一个FlowLayout。结果程序加载这个页面的时候就崩溃了,报错是“UICollectionV...
  • tieshuxianrezhang
  • tieshuxianrezhang
  • 2016年06月26日 18:33
  • 564

android 一个页面内 多个listview的实现

如果很平常的两个listview组件竖直放在linearLayout布局中,结果是: 两个listview 很独立,中间似乎有个分割线,完全吧他们分离了,各自独立滚动,如果上面的listview把整...
  • Buaaroid
  • Buaaroid
  • 2014年05月29日 10:42
  • 14381
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android小知识——一个界面有多个listView
举报原因:
原因补充:

(最多只允许输入30个字)