天天看點

遊标和XML解析

重新整理網址 http://blog.csdn.net/lmj623565791/article/details/38238749

方法一:

  用RadioGroup寫XML檔案時

<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=".MainActivity" >

    <RadioGroup

        android:id="@+id/group"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" >

        <RadioButton

            android:id="@+id/btn_1"

            android:paddingLeft="10dp"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:button="@null"

            android:text="資訊" />

        <RadioButton

            android:id="@+id/btn_2"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:button="@null"

            android:paddingLeft="10dp"

            android:text="熱點" />

        <RadioButton

            android:id="@+id/btn_3"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:button="@null"

            android:paddingLeft="10dp"

            android:text="部落格" />

        <RadioButton

            android:id="@+id/btn_4"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:paddingLeft="10dp"

            android:button="@null"

            android:text="推薦" />

    </RadioGroup>

    <LinearLayout

        android:id="@+id/line"

        android:orientation="horizontal"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_below="@id/group" >

    </LinearLayout>

    <android.support.v4.view.ViewPager

        android:id="@+id/vp"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_below="@id/line" >

    </android.support.v4.view.ViewPager>

</RelativeLayout>

Activity是

package com.example.youbiao;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import android.graphics.Color;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentManager;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.util.DisplayMetrics;

import android.view.Gravity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.LinearLayout;

import android.widget.LinearLayout.LayoutParams;

import android.widget.RadioButton;

import android.widget.RadioGroup;

import android.widget.TextView;

public class MainActivity extends FragmentActivity implements OnClickListener {

    private int width;

    private ViewPager vp;

    private RadioGroup group;

    private String[] column = new String[] { "資訊", "熱點", "部落格", "推薦" };

    private RadioButton btn_1;

    private RadioButton btn_2;

    private RadioButton btn_3;

    private RadioButton btn_4;

    private LinearLayout line;

    private List<String> str = Arrays

            .asList("http://www.oschina.net/action/api/news_list?catalog=1&pageSize=10&pageIndex=",

                    "http://www.oschina.net/action/api/news_list?catalog=4&pageSize=10&show=week&pageIndex=",

                    "http://www.oschina.net/action/api/blog_list?type=latest&pageSize=10&pageIndex=",

                    "http://www.oschina.net/action/api/blog_list?type=recommend&pageSize=10&pageIndex=");

    private ArrayList<Fragment> list_fragment;

    private ArrayList<TextView> list_tv;

    private ArrayList<RadioButton> list_btn;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        DisplayMetrics outMetrics = new DisplayMetrics();

        getWindowManager().getDefaultDisplay().getMetrics(outMetrics);

        width = outMetrics.widthPixels;

        init();

        // 初始化導航

        setColumn();

        // 為vp設定fragment頁面

        setFragment();

        // 為vp設定擴充卡

        FragmentManager fm = getSupportFragmentManager();

        vp.setAdapter(new MyPagerAdapter(fm, list_fragment));

        // 設定文字顔色

        setTextClo(vp.getCurrentItem());

        // 設定遊标顯示

        setYouBiao(vp.getCurrentItem());

        vp.setOnPageChangeListener(new OnPageChangeListener() {

            @Override

            public void onPageSelected(int arg0) {

                // TODO Auto-generated method stub

                // 設定文字顔色

                setTextClo(arg0);

                // 設定遊标顯示

                setYouBiao(arg0);

            }

            @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

            }

        });

    }

    private void setYouBiao(int arg0) {

        // TODO Auto-generated method stub

        // 擷取目前頁面的遊标

        TextView textView = list_tv.get(arg0);

        // 将目前的遊标顯示

        textView.setVisibility(View.VISIBLE);

        // 将其他的遊标隐藏

        for (int i = 0; i < list_tv.size(); i++) {

            TextView textView2 = list_tv.get(i);

            if (textView2 != textView) {

                textView2.setVisibility(View.INVISIBLE);

            }

        }

    }

    private void setTextClo(int p) {

        // TODO Auto-generated method stub

        RadioButton radioButton = list_btn.get(p);

        radioButton.setGravity(Gravity.CENTER);

        radioButton.setTextColor(Color.GREEN);

        for (int i = 0; i < list_btn.size(); i++) {

            RadioButton radioButton2 = list_btn.get(i);

            if (radioButton2 != radioButton) {

                radioButton2.setTextColor(Color.BLACK);

            }

        }

    }

    private void setFragment() {

        // TODO Auto-generated method stub

        list_fragment = new ArrayList<Fragment>();

        for (int i = 0; i < column.length; i++) {

            // 建立fragment對象

            MyFragment myFragment = new MyFragment(str.get(i), i);

            list_fragment.add(myFragment);

        }

    }

    private void setColumn() {

        // TODO Auto-generated method stub

        // 建立集合對象

        list_tv = new ArrayList<TextView>();

        for (int i = 0; i < 4; i++) {

            TextView tv = new TextView(this);

            tv.setBackgroundColor(Color.GREEN);

            tv.setGravity(Gravity.CENTER);

            LinearLayout.LayoutParams params_1 = new LayoutParams(width / 4, 4);

            tv.setVisibility(View.INVISIBLE);

            line.addView(tv, params_1);

            // 收集textview,即遊标

            list_tv.add(tv);

        }

    }

    private void init() {

        // TODO Auto-generated method stub

        group = (RadioGroup) findViewById(R.id.group);

        btn_1 = (RadioButton) findViewById(R.id.btn_1);

        btn_2 = (RadioButton) findViewById(R.id.btn_2);

        btn_3 = (RadioButton) findViewById(R.id.btn_3);

        btn_4 = (RadioButton) findViewById(R.id.btn_4);

        btn_1.setOnClickListener(this);

        btn_2.setOnClickListener(this);

        btn_3.setOnClickListener(this);

        btn_4.setOnClickListener(this);

        vp = (ViewPager) findViewById(R.id.vp);

        line = (LinearLayout) findViewById(R.id.line);

        list_btn = new ArrayList<RadioButton>();

        list_btn.add(btn_1);

        list_btn.add(btn_2);

        list_btn.add(btn_3);

        list_btn.add(btn_4);

    }

    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        switch (v.getId()) {

        case R.id.btn_1:

            vp.setCurrentItem(0);

            break;

        case R.id.btn_2:

            vp.setCurrentItem(1);

            break;

        case R.id.btn_3:

            vp.setCurrentItem(2);

            break;

        case R.id.btn_4:

            vp.setCurrentItem(3);

            break;

        default:

            break;

        }

    }

}

Vo包是  網址是 http://www.oschina.net/action/api/news_list?catalog=1&pageSize=10&pageIndex=

package com.example.youbiao;

import java.io.Serializable;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import com.thoughtworks.xstream.annotations.XStreamImplicit;

@XStreamAlias("oschina")

public class Bean implements Serializable {

     public String catalog;

     public String newsCount;

     public String pagesize;

     public Newslist newslist;

     @XStreamAlias("newslist")

     public class Newslist implements Serializable{

         @XStreamImplicit(itemFieldName="news")

         public List<News> news;

     }

     public class News implements Serializable{

         public String id;

         public String title;

         public String body;

         public String commentCount;

         public String author;

         public String authorid;

         public String pubDate;

         public String url;

         public Type newstype;

     }

     @XStreamAlias("newstype")

     public class Type implements Serializable{

         public String type;

         public String authoruid2;

         public String eventurl;

         public String attachment;

     }

}

Fragment是

package com.example.youbiao;

import java.util.List;

import android.os.Bundle;

import android.os.Handler;

import android.support.v4.app.Fragment;

import android.text.format.DateUtils;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import com.example.youbiao.Bean.News;

import com.example.youbiao.Blog.BlogEntity;

import com.handmark.pulltorefresh.library.PullToRefreshBase;

import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;

import com.handmark.pulltorefresh.library.PullToRefreshListView;

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 com.thoughtworks.xstream.XStream;

public class MyFragment extends Fragment {

    private String url;

    private int position;

    private BeanBaseAdapter adapter;

    private BlogBaseAdapter blogadapter;

    private int num;

    private Handler mhandler;

    private List<News> list;

    private List<BlogEntity> lists;

    private PullToRefreshListView mPullRefreshListView;

    public MyFragment(String url, int position) {

        super();

        this.url = url;

        this.position = position;

    }

    @SuppressWarnings("unchecked")

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment, null);

        mhandler = new Handler();

        Log.i("aaa", position+"");

        getdata(url);

        mPullRefreshListView = (PullToRefreshListView)view. findViewById(R.id.pull_refresh_list);  

        mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2() {

            @Override

            public void onPullDownToRefresh(PullToRefreshBase refreshView) {

                // TODO Auto-generated method stub

                mhandler.postDelayed(new Runnable() {

                    @Override

                    public void run() {

                        String u=url+num;

                        num++;

                        getdata(u);

                        onLoad();

                        mPullRefreshListView.onRefreshComplete();  

                    }

                }, 2000);

            }

            @Override

            public void onPullUpToRefresh(PullToRefreshBase refreshView) {

                // TODO Auto-generated method stub

                mhandler.postDelayed(new Runnable() {

                    @Override

                    public void run() {

                        String u=url+num;

                        num+=2;

                        getdataflush(u);

                        onLoad();

                        mPullRefreshListView.onRefreshComplete();  

                    }

                }, 2000);

            }

        });

        return view;

    }

    private void getdataflush(String u) {

        // TODO Auto-generated method stub

        HttpUtils httpUtils=new HttpUtils();

        httpUtils.send(HttpMethod.GET, u, new RequestCallBack<String>() {

            @Override

            public void onFailure(HttpException arg0, String arg1) {

                // TODO Auto-generated method stub

            }

            @Override

            public void onSuccess(ResponseInfo<String> arg0) {

                // TODO Auto-generated method stub

                XStream stream=new XStream();

                if (position==0||position==1) {

                    stream.processAnnotations(Bean.class);

                    Bean bean = (Bean) stream.fromXML(arg0.result);

                    List<News> list1 = bean.newslist.news;

                    list.addAll(list1);

                    adapter.notifyDataSetChanged();

                }else if(position==2||position==3){

                    stream.processAnnotations(Blog.class);

                    Blog blog = (Blog) stream.fromXML(arg0.result);

                    List<BlogEntity> lists1 = blog.blogs.blog;

                    lists.addAll(lists1);

                    blogadapter.notifyDataSetChanged();

                }

            }

        });

    }

    private void getdata(String url2) {

        // TODO Auto-generated method stub

        HttpUtils httpUtils=new HttpUtils();

        httpUtils.send(HttpMethod.GET, url2, new RequestCallBack<String>() {

            @Override

            public void onFailure(HttpException arg0, String arg1) {

                // TODO Auto-generated method stub

            }

            @Override

            public void onSuccess(ResponseInfo<String> arg0) {

                // TODO Auto-generated method stub

                XStream stream=new XStream();

                if (position==0||position==1) {

                    stream.processAnnotations(Bean.class);

                    Bean bean = (Bean) stream.fromXML(arg0.result);

                    list = bean.newslist.news;

                    adapter = new BeanBaseAdapter(getActivity(),list);

                    mPullRefreshListView.setAdapter(adapter);

                }else if(position==2||position==3){

                    stream.processAnnotations(Blog.class);

                    Blog blog = (Blog) stream.fromXML(arg0.result);

                    lists = blog.blogs.blog;

                    Log.i("aaa", lists.toString());

                    blogadapter = new BlogBaseAdapter(getActivity(),lists);

                    mPullRefreshListView.setAdapter(blogadapter);

                }

            }

        });

    }

    private void onLoad(){

         String label = DateUtils.formatDateTime(  

                 getActivity(),  

                 System.currentTimeMillis(),  

                 DateUtils.FORMAT_SHOW_TIME  

                         | DateUtils.FORMAT_SHOW_DATE  

                         | DateUtils.FORMAT_ABBREV_ALL);  

         // 顯示最後更新的時間  

         mPullRefreshListView.getLoadingLayoutProxy()  

                 .setLastUpdatedLabel(label);

    }

}

Fragment擴充卡是

package com.example.youbiao;

import java.util.List;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

public class MyPagerAdapter extends FragmentPagerAdapter{

    private List<Fragment> list;

    public MyPagerAdapter(FragmentManager fm,List<Fragment> list) {

        super(fm);

        // TODO Auto-generated constructor stub

        this.list=list;

    }

    @Override

    public Fragment getItem(int arg0) {

        // TODO Auto-generated method stub

        return list.get(arg0);

    }

    @Override

    public int getCount() {

        // TODO Auto-generated method stub

        return list.size();

    }

}

擴充卡是

package com.example.youbiao;

import java.util.List;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

import com.example.youbiao.Bean.News;

public class BeanBaseAdapter extends BaseAdapter {

    Context context;

    List<News> list;

    public BeanBaseAdapter(Context context, List<News> list) {

        // TODO Auto-generated constructor stub

        this.context=context;

        this.list=list;

    }

    @Override

    public int getCount() {

        // TODO Auto-generated method stub

        return list.size();

    }

    @Override

    public Object getItem(int arg0) {

        // TODO Auto-generated method stub

        return list.get(arg0);

    }

    @Override

    public long getItemId(int position) {

        // TODO Auto-generated method stub

        return position;

    }

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        // TODO Auto-generated method stub

        ViewHolder vh;

        if(convertView==null){

            convertView=LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_2, null);

            vh=new ViewHolder();

            vh.tv1=(TextView) convertView.findViewById(android.R.id.text1);

            vh.tv2=(TextView) convertView.findViewById(android.R.id.text2);

            convertView.setTag(vh);

        }else{

            vh=(ViewHolder) convertView.getTag();

        }

        vh.tv1.setText(list.get(position).title);

        vh.tv2.setText(list.get(position).body);

        return convertView;

    }

    class ViewHolder{

        TextView tv1,tv2;

    }

}

方法二   建議網址 http://www.jianshu.com/p/a2263ee3e7c3  

package com.example.mouth;

import java.util.Arrays;

import java.util.List;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.widget.Toast;

import com.viewpagerindicator.TabPageIndicator;

public class MainActivity extends FragmentActivity {

    private ViewPager mPager;

    private List<String> url_list = Arrays

            .asList("http://www.oschina.net/action/api/news_list?catalog=1&pageSize=10&pageIndex=",

                    "http://www.oschina.net/action/api/news_list?catalog=4&pageSize=10&show=week&pageIndex=",

                    "http://www.oschina.net/action/api/blog_list?type=latest&pageSize=10&pageIndex=",

                    "http://www.oschina.net/action/api/blog_list?type=recommend&pageSize=10&pageIndex=");

    private static final String[] TITLE = new String[] {"咨詢", "熱點", "部落格","推薦"};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        findId();

    }

    private void findId() {

        mPager = (ViewPager) findViewById(R.id.pager);

        // ViewPager的adapter

        FragmentPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());

        mPager.setAdapter(adapter);

        // 執行個體化TabPageIndicator然後設定ViewPager與之關聯

        TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);

        indicator.setViewPager(mPager);

        // 如果我們要對ViewPager設定監聽,用indicator設定就行了

        indicator.setOnPageChangeListener(new OnPageChangeListener() {

            @Override

            public void onPageSelected(int arg0) {

            }

            @Override

            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override

            public void onPageScrollStateChanged(int arg0) {

            }

        });

    }

    class MyPagerAdapter extends FragmentPagerAdapter {

        public MyPagerAdapter(FragmentManager fm) {

            super(fm);

            // TODO Auto-generated constructor stub

        }

        @Override

        public Fragment getItem(int position) {

            // 建立一個Fragment來展示ViewPager item的内容,并傳遞參數

            BaseFragment fragment = new BaseFragment(url_list.get(position),

                    position);

            return fragment;

        }

        @Override

        public CharSequence getPageTitle(int position) {

            return TITLE[position % TITLE.length];

        }

        @Override

        public int getCount() {

            return TITLE.length;

        }

    }

}