簡體   English   中英

具有三個不同xml項的android ListView適配器

[英]android ListView adapter with three different xml items

我試圖用三種不同的項目類型創建一個列表視圖,我有一個可以處理兩個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;
}

我嘗試創建一種名為“ addFavapp”的方法來添加我的第三個XML文件,但無法使其正常工作。

請幫助。

通過更換將其固定

        return mSeparatorsSet.contains(position) ? TYPE_WEATHER : TYPE_TIME;

在getItemViewType里面

        return position;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM