《笑话大全》APP的最后一章,关于主页的Fragment,先看代码:
public class ContentFragment extends Fragment {
//装载Fragment的View
private View view;
//主页面的RadioGroup和RadioButton
private RadioGroup radioGroup;
private RadioButton radioButton1,radioButton2;
//主页上的ViewPager;
private HomeViewPager homeViewPager;
//装载ViewPager的两个View,也就是两个布局文件。
private View view1,view2;
//存储两个布局文件的List集合。
private List<View> list;
//主页底栏下的RadioGroup。
private RadioGroup rg;
//主页的文字ListView;
private MyListView textList;
//附页的ListView
private MyListView twoTextList;
//Json数据对象
private ArrayList<Result.Data> jokesDataList;
private ArrayList<Result2.Data> twoJokesDataList;
//ListView适配器
private TextListAdapter listAdapter;
//ListView附页适配器
private TwoListAdapter twoListAdapter;
//声明文字页下拉刷新控件
private SwipeRefreshLayout swipeLayout;
//声明附页下拉刷新控件
private SwipeRefreshLayout twoSwipe;
//API page页数字段值
private int page=2;
private int page2=2;
private Result.Data data;
private Result2.Data data2;
private TimeStamp timeStamp=new TimeStamp();
private String s;
private String s1;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_content,null);
homeViewPager=(HomeViewPager)view.findViewById(R.id.viewpager_home);
rg=(RadioGroup)view.findViewById(R.id.radio_main);
AdView adView=new AdView(getActivity(), AdSize.FIT_SCREEN);
LinearLayout adLayout=(LinearLayout)view.findViewById(R.id.adLayout);
adLayout.addView(adView);
//初始化ViewPager的函数。
initViewPagerData();
initView();
return view;
}
/**
* 当加载更多数据时,就调用此方法
* 请求成功后,在onSuccess()方法中调用processData()方法进行数据解析时,第二个参数传入的是true
* 就会执行该方法中if语句中的else语句。
*/
private void getMoreDataFromServer(){
HttpUtils utils=new HttpUtils();
//send就是发送请求。参数一代表获取数据。参数二是请求API的地址,
utils.send(HttpRequest.HttpMethod.GET,URLList.CATEGORY_URL1+page+URLList.CATEGORY_URL2,
new RequestCallBack<String>() {
//请求成功
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String result=responseInfo.result;
processData(result,true);
}
//请求失败
@Override
public void onFailure(HttpException e, String s) {
e.printStackTrace();
Toast.makeText(getActivity(),s,Toast.LENGTH_SHORT).show();
}
});
}
private void getMoreTwoFromServer(){
s1 = timeStamp.getTimeStamp(8);
if (s1!=null){
HttpUtils utils=new HttpUtils();
if (s1!=null){
//send就是发送请求。参数一代表获取数据。参数二是请求API的地址,
utils.send(HttpRequest.HttpMethod.GET,URLList.TWO_CATEGORY_URL1+page2+URLList.TWO_CATEGORY_URL2+s1
, new RequestCallBack<String>() {
//请求成功
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String result=responseInfo.result;
processTwoData(result,true);
}
//请求失败
@Override
public void onFailure(HttpException e, String s) {
e.printStackTrace();
Toast.makeText(getActivity(),s,Toast.LENGTH_SHORT).show();
}
});
}
}
}
//此函数用于设置RadioButton的自定义图片的大小
private void initView(){
radioGroup = (RadioGroup)view.findViewById(R.id.radio_main);
radioButton1 = (RadioButton)view.findViewById(R.id.radio_button1);
radioButton2 = (RadioButton)view.findViewById(R.id.radio_button2);
//定义底部标签图片大小
Drawable jokeDrawable=getResources().getDrawable(R.drawable.tab_joke_selector,null);
//第一0是距左右边距离,第二0是距上下边距离,第三长度,第四宽度
jokeDrawable.setBounds(0,0,50,50);
//设置到第二个参数意为将图片放上面,放入的参数位置不同,图片的摆放位置不同。也可以四个参数全部为null,当然这样的结果就是没有图片。
radioButton1.setCompoundDrawables(null,jokeDrawable, null, null);
Drawable photoDrawable= getResources().getDrawable(R.drawable.tab_photo_selector,null);
photoDrawable.setBounds(0, 0,50,50);
radioButton2.setCompoundDrawables(null,photoDrawable, null,null);
//初始化底部标签
radioGroup.check(R.id.radio_button1);// 默认勾选首页,初始化时候让首页默认勾选
}
//初始化主页ViewPager的数据
private void initViewPagerData(){
LayoutInflater layoutInflater=LayoutInflater.from(getContext());
view1=layoutInflater.inflate(R.layout.viewpager_home1,null);
view2=layoutInflater.inflate(R.layout.viewpager_home2,null);
//实例化文字页SwipeRefreshLayout.(Google官方下拉刷新控件)
swipeLayout=(SwipeRefreshLayout)view1.findViewById(R.id.swiperefresh_layout);
//下拉监听器,刷新回调函数(一般用于更新UI)
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getDataFromServer();
//设置刷新完成,进度圆圈圈停止转动。
swipeLayout.setRefreshing(false);
}
});
//设置刷新小圆圈的进度颜色,旋转一圈即随机更改颜色。
swipeLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light,
android.R.color.holo_orange_light, android.R.color.holo_red_light);
// 设置手指在屏幕下拉多少距离会触发下拉刷新,200差不多了。其实默认的距离也很合适。
swipeLayout.setDistanceToTriggerSync(200);
//设置刷新控件的大小,这是默认选项。
swipeLayout.setSize(SwipeRefreshLayout.DEFAULT);
//ListView在View1的布局文件中,就必须在该布局文件中寻找Id并实例化,否则会空指针异常。
textList=(MyListView)view1.findViewById(R.id.home_list);
textList.setOnRefreshListener(new MyListView.OnRefreshListener() {
@Override
public void onLoadMore() {
getMoreDataFromServer();
if (data!=null) {
page++;
}else{
page=2;
Toast.makeText(getContext(),"没有更多数据!",Toast.LENGTH_SHORT).show();
}
}
});
//附页List实例化
twoTextList=(MyListView)view2.findViewById(R.id.two_list);
twoTextList.setOnRefreshListener(new MyListView.OnRefreshListener() {
@Override
public void onLoadMore() {
getMoreTwoFromServer();
if (data2!=null) {
page2++;
}else{
page2=2;
Toast.makeText(getContext(),"没有更多数据!",Toast.LENGTH_SHORT).show();
}
}
});
//附页下拉刷新
twoSwipe=(SwipeRefreshLayout)view2.findViewById(R.id.swiperefresh_layout2);
twoSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getDataFromTwoServer();
twoSwipe.setRefreshing(false);
}
});
twoSwipe.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green