用radioGroup和radioButton实现四个选项卡,“资讯”、“热点”、“博客”、“推荐”
使用Xutils方式实现请求网络接口
解析XML数据,封装到集合里面,用XListView显示解析数据,实现下拉刷新,上拉加载, 需要添加XListView依赖包
- <span style="font-size:18px;">activity_main:
- <LinearLayout 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"
- android:orientation="vertical" >
- <RadioGroup
- android:id="@+id/radioGroup1"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:layout_height="40dp"
- >
- <RadioButton
- android:id="@+id/radio0"
- android:button="@null"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:gravity="center"
- android:layout_height="fill_parent"
- android:textColor="#00ff00"
- android:textSize="20sp"
- android:text="资讯" />
- <RadioButton
- android:id="@+id/radio1"
- android:button="@null"
- android:textSize="20sp"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:gravity="center"
- android:layout_height="fill_parent"
- android:text="热点" />
- <RadioButton
- android:id="@+id/radio2"
- android:button="@null"
- android:textSize="20sp"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:gravity="center"
- android:layout_height="fill_parent"
- android:text="博客" />
- <RadioButton
- android:id="@+id/radio3"
- android:button="@null"
- android:textSize="20sp"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:gravity="center"
- android:layout_height="fill_parent"
- android:text="推荐" />
- </RadioGroup>
- <android.support.v4.view.ViewPager
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/viewPager"
- />
- </LinearLayout></span>
fragment.xml代码
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <me.maxwin.view.XListView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/xListView1"
- ></me.maxwin.view.XListView>
- </LinearLayout>
Bean
- package com.bwie.test2.bean;
- public class Zixun {
- private String title;
- private String body;
- private String pubDate;
- private String author;
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getBody() {
- return body;
- }
- public void setBody(String body) {
- this.body = body;
- }
- public String getPubDate() {
- return pubDate;
- }
- public void setPubDate(String pubDate) {
- this.pubDate = pubDate;
- }
- public String getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- public Zixun(String title, String body, String pubDate, String author) {
- super();
- this.title = title;
- this.body = body;
- this.pubDate = pubDate;
- this.author = author;
- }
- public Zixun() {
- super();
- // TODO Auto-generated constructor stub
- }
- @Override
- public String toString() {
- return "Zixun [title=" + title + ", body=" + body + ", pubDate="
- + pubDate + ", author=" + author + "]";
- }
- }
接下来是Fragment.java中的代码,一共有四个Fragment,代码一样,唯一区别是请求数据的地址不同
- package com.bwie.test2.fragment;
- import java.io.ByteArrayInputStream;
- import java.util.ArrayList;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlPullParserException;
- import me.maxwin.view.XListView;
- import me.maxwin.view.XListView.IXListViewListener;
- import com.bwie.test2.R;
- import com.bwie.test2.adapter.MyBaseAdapter;
- import com.bwie.test2.bean.Zixun;
- import com.lidroid.xutils.HttpUtils;
- import com.lidroid.xutils.exception.HttpException;
- import com.lidroid.xutils.http.ResponseInfo;
- import com.lidroid.xutils.http.callback.RequestCallBack;
- import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.util.Xml;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- public class Fragment1 extends Fragment <span style="color:#FF0000;">implements IXListViewListener</span>{
- private XListView xlistView;
- boolean isRefresh = false;
- ArrayList<Zixun> mZxList=new ArrayList<Zixun>();
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment1, container, false);
- xlistView = (XListView) view.findViewById(R.id.xListView1);
- return view;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- xlistView.setPullLoadEnable(true);
- xlistView.setXListViewListener(this);
- myBaseAdapter=null;
- questNet();
- }
- private int index=0;
- private Zixun zixun;
- private MyBaseAdapter myBaseAdapter;
- private void questNet() {
- String path="http://www.oschina.net/action/api/news_list?pageIndex="+index;
- HttpUtils httpUtils = new HttpUtils();
- httpUtils.send(HttpMethod.GET, path, new RequestCallBack<String>() {
- @Override
- public void onFailure(HttpException arg0, String arg1) {
- }
- @Override
- public void onSuccess(ResponseInfo<String> arg0) {
- String result = arg0.result;
- ByteArrayInputStream arrayInputStream=new ByteArrayInputStream(result.getBytes());
- ArrayList<Zixun> startAnalyze = startAnalyze(arrayInputStream);
- if (isRefresh) {
- mZxList.clear();
- }
- mZxList.addAll(startAnalyze);
- if (myBaseAdapter == null) {
- myBaseAdapter = new MyBaseAdapter(getActivity(), mZxList);
- xlistView.setAdapter(myBaseAdapter);
- } else {
- myBaseAdapter.notifyDataSetChanged();
- }
- onLoad();
- }
- });
- }
- protected ArrayList<Zixun> startAnalyze(ByteArrayInputStream arrayInputStream) {
- ArrayList<Zixun> zxList = new ArrayList<Zixun>();
- try {
- XmlPullParser newPullParser = Xml.newPullParser();
- newPullParser.setInput(arrayInputStream, "utf-8");
- int eventType = newPullParser.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT) {
- String name = newPullParser.getName();
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if ("news".equals(name)) {
- zixun = new Zixun();
- } else if ("title".equals(name)) {
- zixun.setTitle(newPullParser.nextText());
- } else if ("body".equals(name)) {
- zixun.setBody(newPullParser.nextText());
- } else if ("pubDate".equals(name)) {
- zixun.setPubDate(newPullParser.nextText());
- } else if ("author".equals(name)) {
- zixun.setAuthor(newPullParser.nextText());
- }
- break;
- case XmlPullParser.END_TAG:
- if ("news".equals(name)) {
- zxList.add(zixun);
- zixun = null;
- }
- break;
- default:
- break;
- }
- eventType = newPullParser.next();
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return zxList;
- }
- @Override
- public void onRefresh() {
- index = 0;
- isRefresh = true;
- }
- @Override
- public void onLoadMore() {
- index++;
- isRefresh = false;
- // 重新请求
- questNet();
- }
- private void onLoad() {
- xlistView.stopRefresh();
- xlistView.stopLoadMore();
- xlistView.setRefreshTime("刚刚");
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="20sp"
- android:padding="10dp"
- android:textStyle="bold"
- android:id="@+id/tv_title"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/tv_body"
- />
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp"
- >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/tv_author"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/tv_time"
- android:layout_marginLeft="20dp"
- />
- </LinearLayout>
- </LinearLayout>
- package com.bwie.test2.adapter;
- import java.util.ArrayList;
- import com.bwie.test2.R;
- import com.bwie.test2.bean.Zixun;
- import android.support.v4.app.FragmentActivity;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.TextView;
- public class MyBaseAdapter extends BaseAdapter {
- private FragmentActivity activity;
- private ArrayList<Zixun> mZxList;
- public MyBaseAdapter(FragmentActivity activity, ArrayList<Zixun> mZxList) {
- this.activity=activity;
- this.mZxList=mZxList;
- }
- @Override
- public int getCount() {
- return mZxList.size();
- }
- @Override
- public Object getItem(int arg0) {
- return null;
- }
- @Override
- public long getItemId(int position) {
- return 0;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View view = View.inflate(activity, R.layout.fragment1_item, null);
- TextView tv_title = (TextView) view.findViewById(R.id.tv_title);
- TextView tv_body = (TextView) view.findViewById(R.id.tv_body);
- TextView tv_time = (TextView) view.findViewById(R.id.tv_time);
- TextView tv_author = (TextView) view.findViewById(R.id.tv_author);
- tv_title.setText(mZxList.get(position).getTitle());
- tv_body.setText(mZxList.get(position).getBody());
- tv_time.setText(mZxList.get(position).getPubDate());
- tv_author.setText(mZxList.get(position).getAuthor());
- return view;
- }
- }
- package com.bwie.test2;
- import java.util.ArrayList;
- import java.util.List;
- import com.bwie.test2.fragment.Fragment1;
- import com.bwie.test2.fragment.Fragment2;
- import com.bwie.test2.fragment.Fragment3;
- import com.bwie.test2.fragment.Fragment4;
- import android.os.Bundle;
- import android.app.Activity;
- import android.graphics.Color;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.app.FragmentPagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.RadioButton;
- import android.widget.RadioGroup;
- public class MainActivity extends FragmentActivity implements OnClickListener{
- private RadioGroup group;
- private RadioButton button;
- private RadioButton button1;
- private RadioButton button2;
- private RadioButton button3;
- private ViewPager viewPager;
- private List<Button> list;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- group = (RadioGroup) findViewById(R.id.radioGroup1);
- button = (RadioButton) findViewById(R.id.radio0);
- button1 = (RadioButton) findViewById(R.id.radio1);
- button2 = (RadioButton) findViewById(R.id.radio2);
- button3 = (RadioButton) findViewById(R.id.radio3);
- viewPager = (ViewPager) findViewById(R.id.viewPager);
- list = new ArrayList<Button>();
- list.add(button);
- list.add(button1);
- list.add(button2);
- list.add(button3);
- for (Button button : list) {
- button.setOnClickListener(this);
- }
- viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
- @Override
- public int getCount() {
- return 4;
- }
- @Override
- public Fragment getItem(int arg0) {
- Fragment fragment = null;
- switch (arg0) {
- case 0:
- fragment=new Fragment1();
- break;
- case 1:
- fragment=new Fragment2();
- break;
- case 2:
- fragment=new Fragment3();
- break;
- case 3:
- fragment=new Fragment4();
- break;
- default:
- break;
- }
- return fragment;
- }
- });
- viewPager.setOnPageChangeListener(new OnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- // TODO Auto-generated method stub
- for (int i = 0; i < list.size(); i++) {
- if (position == i) {
- list.get(i).setTextColor(Color.GREEN);
- } else {
- list.get(i).setTextColor(Color.BLACK);
- }
- }
- }
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onPageScrollStateChanged(int arg0) {
- // TODO Auto-generated method stub
- }
- });
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.radio0 :
- button.setTextColor(Color.GREEN);
- button1.setTextColor(Color.BLACK);
- button2.setTextColor(Color.BLACK);
- button3.setTextColor(Color.BLACK);
- viewPager.setCurrentItem(0);
- break;
- case R.id.radio1 :
- button.setTextColor(Color.BLACK);
- button1.setTextColor(Color.GREEN);
- button2.setTextColor(Color.BLACK);
- button3.setTextColor(Color.BLACK);
- viewPager.setCurrentItem(1);
- break;
- case R.id.radio2 :
- button.setTextColor(Color.BLACK);
- button1.setTextColor(Color.BLACK);
- button2.setTextColor(Color.GREEN);
- button3.setTextColor(Color.BLACK);
- viewPager.setCurrentItem(2);
- break;
- case R.id.radio3 :
- button.setTextColor(Color.BLACK);
- button1.setTextColor(Color.BLACK);
- button2.setTextColor(Color.BLACK);
- button3.setTextColor(Color.GREEN);
- viewPager.setCurrentItem(3);
- break;
- default:
- break;
- }
- }
- }