工具类
public class NetUtil {
public static NetUtil instance;
public static NetUtil getinstance(){
if(instance == null){
instance = new NetUtil();
}
return instance;
}
public interface CallBack<T>{
void getload(T t);
}
@SuppressLint("StaticFieldLeak")
public void getloadmessage(final String myuri, final Class clazz, final CallBack callBack){
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return getloadmessage(myuri,clazz);
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
callBack.getload(o);
}
}.execute(myuri);
}
public <E> E getloadmessage(String myuri,Class clazz){
String getloadmessages = getloadmessages(myuri);
E e = (E) new Gson().fromJson(getloadmessages, clazz);
return e;
}
public String getloadmessages(String myuri){
String result = "";
try {
URL url = new URL(myuri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if(responseCode == 200){
result = stream(connection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private String stream(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
for (String tmp = br.readLine();tmp != null;tmp = br.readLine()){
builder.append(tmp);
}
return builder.toString();
}
}
APP
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = null;
try {
configuration = new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(new DisplayImageOptions.Builder()
.displayer(new RoundedBitmapDisplayer(18))
.cacheOnDisk(true)
.cacheOnDisk(true)
.build())
.diskCache(new LruDiskCache(new File(Environment.getExternalStorageDirectory(),"imagefile"),new Md5FileNameGenerator(),10*1204*1024))
.build();
} catch (IOException e) {
e.printStackTrace();
}
ImageLoader instance = ImageLoader.getInstance();
instance.init(configuration);
}
Main
public class MainActivity extends AppCompatActivity {
private int flag;
private XListView xlistview;
private MyBase adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlistview = findViewById(R.id.xlistview);
flag = 1;
adapter = new MyBase(this);
xlistview.setAdapter(adapter);
xlistview.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
flag = 1;
getinfo();
}
@Override
public void onLoadMore() {
flag ++;
getinfo();
}
});
getinfo();
}
//banner url
private String bannerUrl = "http://www.zhaoapi.cn/quarter/getAd";
//news url
private String newsUrl = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
private void getinfo(){
if(flag == 1){
getinfonews();
getinfobanner();
}else {
getinfonews();
}
}
private void getinfonews(){
NetUtil.getinstance().getloadmessage(newsUrl, DataBean.class, new NetUtil.CallBack<DataBean>() {
@Override
public void getload(DataBean o) {
//List<DataBean.Data> data = o.getData();
if(flag == 0){
adapter.setNewdata(o.getData());
}else {
adapter.addNewdata(o.getData());
}
xlistview.stopLoadMore();
xlistview.stopRefresh();
}
});
}
private void getinfobanner(){
NetUtil.getinstance().getloadmessage(bannerUrl, BannerBean.class, new NetUtil.CallBack<BannerBean>() {
@Override
public void getload(BannerBean o) {
adapter.setBannerdata(o.getData());
}
});
}
}
Adapter
public class MyBase extends BaseAdapter {
private List<DataBean.Data> mnewdata;
private List<BannerBean.Data> mbannerdata;
private Context context;
public MyBase(Context context) {
this.context = context;
mnewdata = new ArrayList<>();
mbannerdata = new ArrayList<>();
}
public void setNewdata(List<DataBean.Data> newdata) {
mnewdata.clear();
if(newdata != null){
mnewdata.addAll(newdata);
}
notifyDataSetChanged();
}
public void addNewdata(List<DataBean.Data> newdata) {
if(newdata != null){
mnewdata.addAll(newdata);
}
notifyDataSetChanged();
}
public void setBannerdata(List<BannerBean.Data> bannerdata) {
mbannerdata.clear();
if(bannerdata != null){
mbannerdata.addAll(bannerdata);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return isBanner()?mnewdata.size()+1:mnewdata.size();
}
public boolean isBanner(){
return mbannerdata.size()>0;
}
@Override
public DataBean.Data getItem(int position) {
return mnewdata.get((isBanner()?position-1:position));
}
private final int COUNT = 2;
private final int BANNER_TYPE = 1;
private final int NEW_TYPE = 0;
@Override
public int getViewTypeCount() {
return COUNT;
}
@Override
public int getItemViewType(int position) {
return position == 0 && isBanner()?BANNER_TYPE:NEW_TYPE;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(getItemViewType(position)==BANNER_TYPE){
ViewHolderBanner holderBanner;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.banneritem,parent,false);
holderBanner = new ViewHolderBanner(convertView);
}else {
holderBanner = (ViewHolderBanner) convertView.getTag();
}
holderBanner.bindData(context,mbannerdata);
}else {
ViewHoldernew holdernew;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.newitem,parent,false);
holdernew = new ViewHoldernew(convertView);
}else {
holdernew = (ViewHoldernew) convertView.getTag();
}
holdernew.bindData(getItem(position));
}
return convertView;
}
class ViewHoldernew{
TextView text1,text2;
ImageView image;
private ViewHoldernew(View con){
text1 = con.findViewById(R.id.textView1);
text2 = con.findViewById(R.id.textView2);
image = con.findViewById(R.id.imageView);
con.setTag(this);
}
private void bindData(DataBean.Data data){
text1.setText(data.getNews_title());
text2.setText(data.getNews_summary());
ImageLoader.getInstance().displayImage(data.getPic_url(),image);
}
}
class ViewHolderBanner{
ViewPager viewPager;
private ViewHolderBanner(View con){
viewPager = con.findViewById(R.id.viewpager);
con.setTag(this);
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
handler.sendEmptyMessageDelayed(0,2000);
}
};
private void bindData(Context context, List<BannerBean.Data> data){
handler.removeCallbacksAndMessages(null);
ViewPagerAdapter adapter = new ViewPagerAdapter(data,context);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(viewPager.getAdapter().getCount()/2);
handler.sendEmptyMessageDelayed(0,2000);
}
}
}
viewpageradapter
public class ViewPagerAdapter extends PagerAdapter {
private List<BannerBean.Data> list;
private Context context;
public ViewPagerAdapter(List<BannerBean.Data> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return 5000;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(list.get(position%list.size()).getreplace(),imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}