主Activity
public class MainActivity extends AppCompatActivity {
ViewPager vp;
List<Fragment>list;
RadioGroup rg;
RadioButton rb1,rb2,rb3,rb4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
rg = (RadioGroup) findViewById(R.id.rg);
rb1 = (RadioButton) findViewById(R.id.rb1);
rb2 = (RadioButton) findViewById(R.id.rb2);
rb3 = (RadioButton) findViewById(R.id.rb3);
rb4 = (RadioButton) findViewById(R.id.rb4);
initData();
VpApdata VpA = new VpApdata(getSupportFragmentManager());
vp.setAdapter(VpA);
//给ViewPage做监听事件
vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position){
case 0:
rg.check(R.id.rb1);
rb1.setBackgroundColor(Color.BLUE);
rb2.setBackgroundColor(Color.GRAY);
break;
case 1:
rg.check(R.id.rb2);
rb2.setBackgroundColor(Color.BLUE);
rb1.setBackgroundColor(Color.GRAY);
break;
case 2:
rg.check(R.id.rb3);
rb3.setBackgroundColor(Color.GREEN);
rb4.setBackgroundColor(Color.GRAY);
break;
case 3:
rg.check(R.id.rb4);
rb4.setBackgroundColor(Color.GREEN);
rb3.setBackgroundColor(Color.GRAY);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//RadioGroup的监听
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch(i){
case R.id.rb1:
vp.setCurrentItem(0);
break;
case R.id.rb2:
vp.setCurrentItem(1);
break;
case R.id.rb3:
vp.setCurrentItem(2);
break;
case R.id.rb4:
vp.setCurrentItem(3);
break;
}
}
});
}
private void initData() {
list = new ArrayList<Fragment>();
list.add(new Fragment_1());
list.add(new Fragment_2());
list.add(new Fragment_3());
list.add(new Fragment_4());
}
class VpApdata extends FragmentPagerAdapter{
public VpApdata(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
}
主Activity的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.xlistview.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
>
<RadioButton
android:id="@+id/rb1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="首页"
android:button="@null"
android:gravity="center"
/>
<RadioButton
android:id="@+id/rb2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="发现"
android:button="@null"
android:gravity="center"
/>
<RadioButton
android:id="@+id/rb3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="搜索"
android:button="@null"
android:gravity="center"
/>
<RadioButton
android:id="@+id/rb4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="我的"
android:button="@null"
android:gravity="center"
/>
</RadioGroup>
</RelativeLayout>
Xlist的主方法
public class Fragment_1 extends Fragment {
ViewPager vp_f1; //用于实现轮播图的控件
bean bn; //bean包 也就是解析完数据的包
VPNews VP; //请求网络数据的包
XListView xlv; //XlistView
Boolean flag=false; //判断true 还是 false 用于刷新数据的
List<String> list; //只记录地址
Handler handler=new Handler(); //handler 机制
int index=10000; //轮播图图片的轮播速度
Myadapter MPA; //XlistView多条目加载 上拉刷新 下拉加载 的适配器
List<bean.DataBean.ComicsBean>list1; //list集合的bean包
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
//加载Fragment的布局
View view = View.inflate(getActivity(), R.layout.fragment_1,null);
//ViewPage的控件
vp_f1 =view.findViewById(R.id.vp_f1);
//XlistView的控件
xlv = view.findViewById(R.id.xlv);
//初始化数据
initData();
//设置适配器
MPA=new Myadapter(); //XlistView适配器的初始化
xlv.setAdapter(MPA);//绑定listView适配器
xlv.setPullLoadEnable(true);//设置当前上拉加载更多是否可用 pullLoadEnabled true表示可用,false表示不可用
xlv.setPullRefreshEnable(true);//设置当前下拉刷新是否可用 pullRefreshEnabled true表示可用,false表示不可用
xlv.setRefreshTime("2017-09-7"); //刷新时间
//xlistView上拉加载,下拉刷新
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
//当flag==false是重新刷新数据
flag=false;
initData();
MPA.notifyDataSetChanged();
xlv.stopRefresh();
}
},2000);
}
@Override
public void onLoadMore() {
//当flag==true是加载更多数据,handler实现2秒
handler.postDelayed(new Runnable() {
@Override
public void run() {
flag=true;
list1.addAll(bn.getData().getComics());
MPA.notifyDataSetChanged();
xlv.stopLoadMore();
}
},2000);
}
});
return view;
}
//轮播的加载
private void initData() {
//异步加载数据
new AsyncTask<String,String,String>(){
@Override
protected String doInBackground(String... strings) {
String result=new VPNews().getData();
Gson gson=new Gson();
bn = gson.fromJson(result, bean.class);
list1 = bn.getData().getComics();
return result;
}
@Override
protected void onPostExecute(String result) {
initVP();
//handler实现倒计时2秒换页 postDelayed 一个定时器
handler.postDelayed(new Runnable() {
@Override
public void run() {
index++;
vp_f1.setCurrentItem(index);
handler.postDelayed(this,2000);
}
},3000);
super.onPostExecute(result);
}
}.execute();
}
//XlistView适配器
class Myadapter extends BaseAdapter{
public static final int TYPE_ONE=0;
public static final int TYPE_TWO=1;
@Override
public int getCount() {
if(bn!=null){
return bn.getData().getComics().size();
}
return 0;
}
@Override
public int getViewTypeCount() {
return 5;
}
@Override
public int getItemViewType(int position) {
int comic_type = bn.getData().getComics().get(position).getComic_type();
if(comic_type==0){
return TYPE_ONE;
}else{
return TYPE_TWO;
}
}
@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) {
//多条目展示数据
ViewHolder holder = null;
ViewHolder1 holder1 = null;
int type = getItemViewType(i);
if(view==null){
if(type==TYPE_ONE){
//加载视图
view=View.inflate(getActivity(),R.layout.list1,null);
holder=new ViewHolder();
//找控件
holder.tv1=view.findViewById(R.id.tv1);
holder.iv1=view.findViewById(R.id.iv1);
view.setTag(holder);
}else{
//加载视图
view=View.inflate(getActivity(),R.layout.list2,null);
holder1= new ViewHolder1();
//找控件
holder1.tv2=view.findViewById(R.id.tv2);
holder1.iv2=view.findViewById(R.id.iv2);
view.setTag(holder1);
}
}else{
if(type==TYPE_ONE){
holder= (ViewHolder) view.getTag();
}else{
holder1= (ViewHolder1) view.getTag();
}
}
//给相对应的控件赋值
if(type==TYPE_ONE){
holder.tv1.setText(bn.getData().getComics().get(i).getTitle());
ImageLoader.getInstance().displayImage(bn.getData().getComics().get(i).getCover_image_url(),holder.iv1);
}else{
holder1.tv2.setText(bn.getData().getComics().get(i).getTitle());
ImageLoader.getInstance().displayImage(bn.getData().getComics().get(i).getCover_image_url(),holder1.iv2);
}
return view;
}
}
static class ViewHolder{
TextView tv1;
ImageView iv1;
}
static class ViewHolder1{
TextView tv2;
ImageView iv2;
}
public void initVP(){
//定义一个集合
list=new ArrayList<String>();
//把从网络请求的图片放入集合中, 在放在iv中
for (int i=0;i<bn.getData().getComics().size();i++){
list.add(bn.getData().getComics().get(i).getCover_image_url());
}
//viewPager适配器
MyVPadapter myVPadapter=new MyVPadapter();
vp_f1.setAdapter(myVPadapter);//绑定适配器
vp_f1.setCurrentItem(10000);//轮播图片的时间
}
//轮播图的适配器
class MyVPadapter extends PagerAdapter{
@Override
public int getCount() {
if(list!=null){
return Integer.MAX_VALUE;
}
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//imageView....返回
ImageView imageView = new ImageView(getActivity());
//加载图片
ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView);
//加到container
container.addView(imageView);
return imageView;
}
}
}
数据的解析
public class VPNews {
public String getData(){
String result=null;
try {
URL url=new URL("http://api.kkmh.com/v1/daily/comic_lists/0?since=0&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9 ");
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
int code = conn.getResponseCode();
if(code==200){
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos=new ByteArrayOutputStream();
int len=-1;
byte[] buff=new byte[1024];
while((len=is.read(buff))!=-1){
bos.write(buff,0,len);
}
result=new String(bos.toByteArray());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
温馨提示:用ImageLode 记得清单文件 ,记得加联网权限,和XlistView的第三方架包