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 + '\'' + '}'; } }