工具类(解析数据)
public class NetUtil {
public static NetUtil instance;
public static NetUtil getInstance(){
if(instance == null){
instance = new NetUtil();
}
return instance;
}
public interface CallBack<T>{
void gett(T t);
}
public void getload(String myuri, final Class clazz, final CallBack callBack){
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return getload(strings[0],clazz);
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
callBack.gett(o);
}
}.execute(myuri);
}
public <E> E getload(String myuri,Class clazz){
String getloadmessage = getloadmessage(myuri);
E e = (E) new Gson().fromJson(getloadmessage, clazz);
return e;
}
public String getloadmessage(String myuri){
String stream = "";
try {
URL url = new URL(myuri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int responseCode = connection.getResponseCode();
if(responseCode == 200){
stream = stream(connection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return stream;
}
public 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();
}
}
MainActivity (BaseActivity)
public class MainActivity extends AppCompatActivity {
private XListView xlistview;
private int flag;
private MyAdapter adapter;
private final int COUNT = 20;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
flag = 1;
xlistview.setPullRefreshEnable(true);
xlistview.setPullLoadEnable(true);
adapter = new MyAdapter(this);
xlistview.setAdapter(adapter);
xlistview.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
flag = 1;
getinti();
}
@Override
public void onLoadMore() {
flag ++;
getinti();
}
});
getinti();
}
private void getinti(){
if(flag == 1){
getinitimage();
getinitnew();
}else {
getinitnew();
}
}
private String image = "http://172.17.8.100/movieApi/movie/v1/findHotMovieList?page=1&count=10";
private String newuri = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
private void getinitnew(){
NetUtil.getInstance().getload(newuri, NewBean.class, new NetUtil.CallBack<NewBean>() {
@Override
public void gett(NewBean o) {
if(o == null){
Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT);
return;
}
if(flag == 1){
adapter.setMdata(o.getData());
}else {
adapter.addMdata(o.getData());
}
xlistview.stopLoadMore();
xlistview.stopRefresh();
/*if(adapter.getCount() < COUNT){
xlistview.setPullLoadEnable(false);
}*/
}
});
}
private void getinitimage(){
NetUtil.getInstance().getload(image, BannerBean.class, new NetUtil.CallBack<BannerBean>() {
@Override
public void gett(BannerBean o) {
if(o == null){
Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT);
return;
}
adapter.setMbanner(o.getResult());
}
});
}
private void initView() {
xlistview = findViewById(R.id.h_xlistview);
}
}
MyAdapter
public class MyAdapter extends BaseAdapter {
private List<BannerBean.Result> mbanner;
private List<NewBean.Data> mdata;
private Context context;
public MyAdapter(Context context) {
this.context = context;
mbanner = new ArrayList<>();
mdata = new ArrayList<>();
}
public void setMbanner(List<BannerBean.Result> banner) {
mbanner.clear();
if(banner!=null){
mbanner.addAll(banner);
}
notifyDataSetChanged();
}
public void setMdata(List<NewBean.Data> data) {
mdata.clear();
if(data!=null){
mdata.addAll(data);
}
notifyDataSetChanged();
}
public void addMdata(List<NewBean.Data> data) {
if(data!=null){
mdata.addAll(data);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return isbanner()?mdata.size()+1:mdata.size();
}
private boolean isbanner(){
return mbanner.size()>0;
}
private final int COUNT = 2;
private final int NEW_TYPE = 0;
private final int BANNER_TYPE = 1;
@Override
public int getItemViewType(int position) {
return position == 0 && isbanner()?BANNER_TYPE:NEW_TYPE;
}
@Override
public int getViewTypeCount() {
return COUNT;
}
@Override
public NewBean.Data getItem(int position) {
return mdata.get(isbanner()?position-1:position);
}
@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.banner_item,parent,false);
holderbanner = new ViewHolderbanner(convertView);
}else {
holderbanner = (ViewHolderbanner) convertView.getTag();
}
holderbanner.binddata(context,mbanner);
}else {
ViewHoldernew holdernew;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.new_item,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.text1_item);
text2 = con.findViewById(R.id.text2_item);
image = con.findViewById(R.id.image_item);
con.setTag(this);
}
private void binddata(NewBean.Data list){
text1.setText(list.getNews_title());
text2.setText(list.getNews_summary());
ImageLoader.getInstance().displayImage(list.getPic_url(),image);
}
}
class ViewHolderbanner{
ViewPager viewPager;
LinearLayout myshape;
TextView tilte;
private ViewHolderbanner(View con){
viewPager = con.findViewById(R.id.viewpager_item);
myshape = con.findViewById(R.id.linear_item);
tilte = con.findViewById(R.id.text_item);
con.setTag(this);
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
sendEmptyMessageDelayed(0,2000);
}
};
private void binddata(Context context, List<BannerBean.Result> list){
handler.removeCallbacksAndMessages(null);
final MyPagerAdapter adapter = new MyPagerAdapter(list, context);
viewPager.setAdapter(adapter);
int count = adapter.getCount()/2;
count = count - count % mbanner.size();
viewPager.setCurrentItem(count);
handler.sendEmptyMessageDelayed(0,2000);
setshape(mbanner.size());
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
private int index=-1;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
tilte.setText(adapter.getItem(position).getSummary());
myshape.getChildAt(position%myshape.getChildCount()).setSelected(true);
if(index>=0){
myshape.getChildAt(index%myshape.getChildCount()).setSelected(false);
}
index = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void setshape(int size) {
myshape.removeAllViews();
for (int i=0;i<size;i++){
ImageView imageView = new ImageView(context);
imageView.setImageResource(R.drawable.selector);
LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
int marge = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,2,context.getResources().getDisplayMetrics());
params.leftMargin = marge;
params.rightMargin = marge;
myshape.addView(imageView,params);
}
}
}
}
PagerAdapter
public class MyPagerAdapter extends PagerAdapter {
private List<BannerBean.Result> list;
private Context context;
public MyPagerAdapter(List<BannerBean.Result> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return 5000;
}
public BannerBean.Result getItem(int position){
return list.get(position%list.size());
}
@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(getItem(position).getImageUrl(),imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
Application(Image-Loader)
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = null;
try {
configuration = new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build())
.diskCache(new LruDiskCache(new File(Environment.getExternalStorageDirectory(),"image"),new Md5FileNameGenerator(),10*1024*1024))
.build();
} catch (IOException e) {
e.printStackTrace();
}
ImageLoader.getInstance().init(configuration);
}
}