具有三个不同xml项的android ListView适配器
我正在尝试创建一个包含三种不同项目类型的listview,我有一个代码可以处理两个XML文件 以下是适配器代码:具有三个不同xml项的android ListView适配器,android,xml,listview,android-arrayadapter,android-adapter,Android,Xml,Listview,Android Arrayadapter,Android Adapter,我正在尝试创建一个包含三种不同项目类型的listview,我有一个代码可以处理两个XML文件 以下是适配器代码: private class MyCustomAdapter extends ArrayAdapter<String> { String hello; private String place; int image; private String temp; private String humidity; private
private class MyCustomAdapter extends ArrayAdapter<String> {
String hello;
private String place;
int image;
private String temp;
private String humidity;
private String windspeed;
private String condition;
private int imageTop;
private String time;
private static final int TYPE_WEATHER = 0;
private static final int TYPE_TIME = 1;
private static final int TYPE_TOP = 2;
private static final int TYPE_MAX_COUNT = 3 + 1;
private ArrayList<String> mData = new ArrayList<String>();
private LayoutInflater mInflater;
private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>();
public MyCustomAdapter(Context context, int resource) {
super(context, resource);
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addWeather(final String place,final int image , final String temp,final String humidity,final String windspeed,final String condition) {
mData.add(place);
this.place = place;
this.image = image;
this.temp = temp;
this.humidity = humidity;
this.windspeed = windspeed;
this.condition = condition;
notifyDataSetChanged();
}
public void addFavapp(final String helloworld){
mData.add(place);
this.hello = helloworld;
notifyDataSetChanged();
}
public void addItem(final String item) {
this.time = item;
mData.add(item);
// save separator position
mSeparatorsSet.add(mData.size() - 1);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return mSeparatorsSet.contains(position) ? TYPE_WEATHER : TYPE_TIME;
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int type = getItemViewType(position);
System.out.println("getView " + position + " " + convertView + " type = " + type);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case TYPE_WEATHER:
convertView = mInflater.inflate(R.layout.weather_item, null);
//Handling xml file weather_item
break;
case TYPE_TIME:
convertView = mInflater.inflate(R.layout.time_card_item, null);
holder.textView = (TextView)convertView.findViewById(R.id.two);
holder.textView.setText(time);
break;
case TYPE_TOP:
convertView = mInflater.inflate(R.layout.top_card_item, null);
//Handling xml file top_card_item
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
return convertView;
}
}
public static class ViewHolder {
public TextView textView;
public ImageView image;
public TextView txtTemp;
public ImageView imageView;
public TextView txthumidity;
public TextView txtWind;
public TextView txtCond;
}
私有类MyCustomAdapter扩展了ArrayAdapter{
串你好;
私人弦乐场;
int图像;
私有字符串温度;
私人串湿度;
私人弦风速;
私有字符串条件;
私人int imageTop;
私有字符串时间;
专用静态最终整型天气=0;
私有静态最终整数类型_TIME=1;
私有静态最终整数类型_TOP=2;
私有静态最终整数类型\最大\计数=3+1;
private ArrayList mData=new ArrayList();
私人停车场;
私有树集mseparatorset=新树集();
公共MyCustomAdapter(上下文,int资源){
超级(上下文、资源);
mInflater=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
}
public void addWeather(最终字符串位置、最终整数图像、最终字符串温度、最终字符串湿度、最终字符串风速、最终字符串条件){
mData.add(place);
这个地方=地方;
这个图像=图像;
this.temp=temp;
这个。湿度=湿度;
this.windspeed=风速;
这个条件=条件;
notifyDataSetChanged();
}
public void addFavapp(最终字符串helloworld){
mData.add(place);
this.hello=helloworld;
notifyDataSetChanged();
}
公共无效附加项(最终字符串项){
这个时间=项目;
mData.add(项目);
//保存分隔符位置
mSeparatorsSet.add(mData.size()-1);
notifyDataSetChanged();
}
@凌驾
public int getItemViewType(int位置){
返回mseparatorset.contains(位置)?TYPE\u天气:TYPE\u时间;
}
@凌驾
public int getViewTypeCount(){
返回类型\最大\计数;
}
@凌驾
public int getCount(){
返回mData.size();
}
@凌驾
公共字符串getItem(int位置){
返回mData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
int type=getItemViewType(位置);
System.out.println(“getView”+位置+“”+convertView+”类型=“+类型);
if(convertView==null){
holder=新的ViewHolder();
开关(类型){
天气情况:
convertView=mInflater.充气(R.layout.weather_项,空);
//处理xml文件weather\u项
打破
案例类型\u时间:
convertView=mInflater.充气(R.layout.time\u card\u项目,空);
holder.textView=(textView)convertView.findViewById(R.id.two);
holder.textView.setText(时间);
打破
箱子类型(顶部):
convertView=mInflater.充气(R.layout.top\u card\u项目,空);
//处理xml文件top\u card\u项
打破
}
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
返回视图;
}
}
公共静态类视图持有者{
公共文本视图文本视图;
公众形象;
公共文本视图txtemp;
公共影像视图;
公共文本视图TXT;
公共文本视图txtWind;
公共文本视图txtCond;
}
我尝试创建一个名为“addFavapp”的方法来添加我的第三个XML文件,但无法使其工作
请帮帮我。更换了它
return mSeparatorsSet.contains(position) ? TYPE_WEATHER : TYPE_TIME;
在getItemViewType中
到
到底是什么不起作用?有错误吗?有没有任何视图加载?从getItemViewType()返回的视图类型只有2个。我没有收到任何错误,但时间卡项目在顶部显示两次,在底部显示一次,我将添加一张图片。我相信这是因为从getItemViewType()返回的视图类型只有3个中的2个。默认的返回值是TYPE_TIME。那么我应该把它改为返回3吗?现在,TYPE_TOP的case语句将永远无法实现。getItemViewType()只返回类型\天气和类型\时间。您需要弄清楚如何确定何时执行类型_TOP。除非我读错了你的代码。
return position;