Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有三个不同xml项的android ListView适配器_Android_Xml_Listview_Android Arrayadapter_Android Adapter - Fatal编程技术网

具有三个不同xml项的android ListView适配器

具有三个不同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

我正在尝试创建一个包含三种不同项目类型的listview,我有一个代码可以处理两个XML文件

以下是适配器代码:

 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;