多條目加載

package test.lilin.com.xlistduo;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import test.lilin.com.xlistduo.xlist.XListView;

public class MainActivity extends AppCompatActivity {
    XListView xlv;
    List<News> list;
    Handler handler=new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        xlv= (XListView) findViewById(R.id.xlv);
        initData();
         Myadapter myadapter=new Myadapter();
        xlv.setPullLoadEnable(true);
        xlv.setPullRefreshEnable(true);
        xlv.setAdapter(myadapter);

        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        initData();
                        Toast.makeText(MainActivity.this,"上啦",Toast.LENGTH_SHORT).show();
                        xlv.stopRefresh();
                    }
                },2000);

            }

            @Override
            public void onLoadMore() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        initData();
                        Toast.makeText(MainActivity.this,"下啦",Toast.LENGTH_SHORT).show();
                        xlv.stopRefresh();
                    }
                },2000);

            }
        });
    }
    class Myadapter extends BaseAdapter {

        public static final int TYPE_ONE=0;

        public static final int TYPE_TWO=1;

        @Override
        public int getCount() {
            return list.size();
        }

        //在使用多條目加載的時候    返回當前position對應的類型
        //************必須滿足的條件   getItemViewType的返回值  必須要小於getViewTypeCount的返回值
        @Override
        public int getItemViewType(int position) {
            if (list.get(position).getType()==10001){
                return TYPE_ONE;
            }else {
                return TYPE_TWO;
            }
        }

        //使用多條目加載時   一共有幾種類型
        //從寫該方法後,listview控件會知道  當前的佈局樣式不止一種
        //所以 當ListView發現convertview在複用時  類型不配不上時  會重寫讓convertView加載一遍佈局
        @Override
        public int getViewTypeCount() {
            return 2;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolder0 holder0 = null;
            ViewHolder1 holder1 = null;
            int type=getItemViewType(i);
            if (view==null){
                switch (type) {
                    case TYPE_ONE:
                        view = View.inflate(MainActivity.this, R.layout.list_item0, null);
                        holder0 = new ViewHolder0();
                        holder0.tv0 = (TextView) view.findViewById(R.id.tv0);
                        view.setTag(holder0);
                        break;
                    case TYPE_TWO:
                        view = View.inflate(MainActivity.this, R.layout.list_item1, null);
                        holder1 = new ViewHolder1();
                        holder1.tv1 = (TextView) view.findViewById(R.id.tv1);
                        view.setTag(holder1);
                        break;
                    default:
                        break;
                }
            }else{
                if(type == TYPE_ONE){
                    holder0 = (ViewHolder0) view.getTag();
                }else{
                    holder1 = (ViewHolder1) view.getTag();
                }
            }

            //根據不同的情況  把進行賦值
            if(type == TYPE_ONE){
                holder0.tv0.setText(list.get(i).getTitle());
            }else{
                holder1.tv1.setText(list.get(i).getTitle());
            }

            return view;
        }
    }
    public static class ViewHolder0{
        TextView tv0;
    }
    public static class ViewHolder1{
        TextView tv1;
        ImageView iv1;
    }
    public void initData(){
        list=new ArrayList<News>();
        for (int i=0;i<100;i++){
            News n;
            if (i%7==5){
                n=new News(10002,"廣告"+i);
            }else{
                n=new News(10001,"正文標題"+i);
            }
            list.add(n);
        }
      }
}



package test.lilin.com.xlistduo;

/**
 * Created by せしおゆ on 2017/8/24.
 */
public class News {
    int type; //10001:顯示新聞   10002:顯示廣告   20001 20002
    String title;
    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public News(int type, String title) {
        super();
        this.type = type;
        this.title = title;
    }

    @Override
    public String toString() {
        return "News{" +
                "type=" + type +
                ", title='" + title + '\'' +
                '}';
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章