MainActivity里面是一个ViewPager联动
public class MainActivity extends FragmentActivity {
private RadioGroup radio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
final ViewPager pager= findViewById(R.id.pager);
radio = findViewById(R.id.radio);
//设置第一个默认
radio.check(radio.getChildAt(0).getId());
//集合
ArrayList<Fragment> arr=new ArrayList<Fragment>();
arr.add(new FragList());
arr.add(new FragGrid());
//适配器
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(),arr));
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
radio.check(radio.getChildAt(i).getId());
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case R.id.radio1:
pager.setCurrentItem(0);
break;
case R.id.radio2:
pager.setCurrentItem(1);
break;
}
}
});
}
}
ViewPager的适配器
public class MyPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> arr;
public MyPagerAdapter(FragmentManager fm, ArrayList<Fragment> arr) {
super(fm);
this.arr=arr;
}
@Override
public Fragment getItem(int i) {
return arr.get(i);
}
@Override
public int getCount() {
return arr.size();
}
}
Http里面写个方法,方便调用
public class Http {
public static String isquest(String strUrl){
try {
//设置url
URL url=new URL(strUrl);
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod("GET");
//设置读取时间
connection.setReadTimeout(5000);
//设置连接超时时间
connection.setConnectTimeout(5000);
//获取请求码
int code = connection.getResponseCode();
if(code==200){
//得到数据
InputStream stream = connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(stream,"utf-8"));
//拼接字符串
StringBuilder builder=new StringBuilder();
String str="";
//读取字符串
while ((str=reader.readLine())!=null){
builder.append(str);
}
//返回字符串
return builder.toString();
}
//关闭连接
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
主要代码来了,listView多条目加载
public class FragList extends Fragment {
private XListView xListView;
private MyListAdapter adapter;
private ArrayList<Datas> datas;
private String str="http://www.xieast.com/api/news/news.php?page=1";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_list, container, false);
//找控件
xListView = view.findViewById(R.id.xlistv);
//启用(true)禁用(false)上拉加载
xListView.setPullLoadEnable(true);
//注册XListViewListener接口
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
new Thread(){
@Override
public void run() {
super.run();
String get = Http.isquest(str);
//解析
Gson gson=new Gson();
JsonBean bean = gson.fromJson(get, JsonBean.class);
ArrayList<Datas> da = bean.getData();
Message message2=new Message();
message2.what=1;
message2.obj=da;
handler.sendMessage(message2);
}
}.start();
}
@Override
public void onLoadMore() {
new Thread(){
@Override
public void run() {
super.run();
String get = Http.isquest(str);
Gson gson=new Gson();
JsonBean bean = gson.fromJson(get, JsonBean.class);
ArrayList<Datas> dat = bean.getData();
Message message1=new Message();
message1.what=2;
message1.obj=dat;
handler.sendMessage(message1);
}
}.start();
}
});
new Thread(){
@Override
public void run() {
super.run();
String s = Http.isquest(str);
Gson gson=new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
ArrayList<Datas> data = jsonBean.getData();
Message message=new Message();
message.what=0;
message.obj=data;
handler.sendMessage(message);
}
}.start();
return view;
}
private void onLoad(){
//停止加载更多,重置头视图
xListView.stopRefresh();
//停止加载更多,重置脚视图
xListView.stopLoadMore();
//设置刷新时间
xListView.setRefreshTime("刚刚刷新了");
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
datas = (ArrayList<Datas>) msg.obj;
adapter = new MyListAdapter(getActivity(),datas);
xListView.setAdapter(adapter);
break;
case 1:
xListView.setAdapter(adapter);
onLoad();
break;
case 2:
ArrayList<Datas> dataa= (ArrayList<Datas>) msg.obj;
datas.addAll(dataa);
adapter.notifyDataSetChanged();
onLoad();
break;
}
}
};
}
image-loader加载图片用的:
//继承Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
DisplayImageOptions options=new DisplayImageOptions.Builder()
// 正在加载时显示的占位图
.showImageOnLoading(R.mipmap.zhan)
// 加载失败时显示的占位图
.showImageOnFail(R.mipmap.shibai)
//设置圆形
.displayer(new CircleBitmapDisplayer())
// bitmap的质量,默认为ARGB_8888
.bitmapConfig(Bitmap.Config.ARGB_8888)
.build();
ImageLoaderConfiguration loaderConfiguration=new ImageLoaderConfiguration.Builder(this)
//把我们写的设置添加到构建中
.defaultDisplayImageOptions(options)
.memoryCacheExtraOptions(200, 200)//配置内存缓存图片的尺寸
.memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小
.threadPoolSize(3)//配置加载图片的线程数
.threadPriority(1000)//配置线程的优先级
.diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径
.diskCacheFileCount(50)//配置sdcard缓存文件的数量
//MD5这种方式生成缓存文件的名字
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 * 1024)//在sdcard缓存50MB
.build();//完成
//获得实例
ImageLoader imageLoader=ImageLoader.getInstance();
//初始化
imageLoader.init(loaderConfiguration);
}
}
还可以设置成圆角图形,只需要换行代码就完事!
.displayer(new RoundedBitmapDisplayer(60))
xlistView多条目加载的适配器,我这个适配器加载了三个视图
public class MyListAdapter extends BaseAdapter {
private Context con;
private ArrayList<Datas> arr;
public MyListAdapter(Context con, ArrayList<Datas> arr) {
this.con = con;
this.arr = arr;
}
@Override
public int getCount() {
return arr.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public int getViewTypeCount() {//视图个数
return 3;
}
@Override
public int getItemViewType(int position) {
return position % 3;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
switch (getItemViewType(i)){
case 0:
ViewHolder0 vh;
if(view==null){
view=LayoutInflater.from(con).inflate(R.layout.item1,null);
vh=new ViewHolder0();
vh.img=view.findViewById(R.id.img);
vh.tit=view.findViewById(R.id.tit);
view.setTag(vh);
}else{
vh= (ViewHolder0) view.getTag();
}
vh.tit.setText(arr.get(i).getTitle());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh.img);
break;
case 1:
ViewHolder1 vh1;
if(view==null){
view=LayoutInflater.from(con).inflate(R.layout.item2,null);
vh1=new ViewHolder1();
vh1.img=view.findViewById(R.id.img);
vh1.tit=view.findViewById(R.id.tit);
view.setTag(vh1);
}else{
vh1= (ViewHolder1) view.getTag();
}
vh1.tit.setText(arr.get(i).getTitle());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh1.img);
break;
case 2:
ViewHolder2 vh2;
if(view==null){
view=LayoutInflater.from(con).inflate(R.layout.item3,null);
vh2=new ViewHolder2();
vh2.img=view.findViewById(R.id.img);
vh2.tit=view.findViewById(R.id.tit);
vh2.name=view.findViewById(R.id.name);
view.setTag(vh2);
}else{
vh2= (ViewHolder2) view.getTag();
}
vh2.tit.setText(arr.get(i).getTitle());
vh2.name.setText(arr.get(i).getAuthor_name());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh2.img);
break;
}
return view;
}
static class ViewHolder0{
ImageView img;
TextView tit;
}
static class ViewHolder1{
ImageView img;
TextView tit;
}
static class ViewHolder2{
ImageView img;
TextView tit,name;
}
}
给大家发一个背景选择器(为了好看)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<color android:color="#f00"/>
</item>
<item android:state_checked="false">
<color android:color="#fff"/>
</item>
</selector>
记住在注册清单里面写