使用radioGroup radiobutton展示导航列表,viewpaer、 fragment 实现页面 ,xlistview展示数据
MainActivity.class
package com.bwie.test; import java.util.ArrayList; import java.util.List; import com.bwie.adapter.MyViewPagerAdapter; import com.bwie.fragment.MyFragment; 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.FragmentManager; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; 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 String[] url = new String[] { "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=", "http://www.oschina.net/action/api/news_list?catalog=4&show=week&pageIndex=", "http://www.oschina.net/action/api/blog_list?type=latest&pageIndex=", "http://www.oschina.net/action/api/blog_list?type=recommend&pageIndex=" }; private String[] column=new String[]{"新闻","热点","博客","推荐"}; private RadioGroup radioGroup; private RadioButton radioButton1; private RadioButton radioButton2; private RadioButton radioButton3; private RadioButton radioButton4; private LinearLayout line; private ViewPager viewPager; private int width; private List<Fragment> fragment_list; private List<TextView> text_list; private List<RadioButton> rbt_list; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取屏幕宽度 WindowManager windowManager=getWindowManager(); width = windowManager.getDefaultDisplay().getWidth(); //找控件 init(); //初始化导航栏的游标 setColumn(); //为viewpager设置fragment页面 setFragment(); FragmentManager manager=getSupportFragmentManager(); //为viewpager设置适配器 viewPager.setAdapter(new MyViewPagerAdapter(manager, fragment_list)); //设置默认的字体颜色,游标位置 setTextColor(viewPager.getCurrentItem()); setYouBiao(viewPager.getCurrentItem()); //对viewpager设置页面改变监听 setPagerOnClick(); //对radiobutton进行监听 radioButton1.setOnClickListener(this); radioButton2.setOnClickListener(this); radioButton3.setOnClickListener(this); radioButton4.setOnClickListener(this); } private void init() { radioGroup = (RadioGroup) findViewById(R.id.radioGroup); radioButton1 = (RadioButton) findViewById(R.id.rbt_1); radioButton2 = (RadioButton) findViewById(R.id.rbt_2); radioButton3 = (RadioButton) findViewById(R.id.rbt_3); radioButton4 = (RadioButton) findViewById(R.id.rbt_4); line = (LinearLayout) findViewById(R.id.line); viewPager = (ViewPager) findViewById(R.id.viewPager); rbt_list = new ArrayList<RadioButton>(); rbt_list.add(radioButton1); rbt_list.add(radioButton2); rbt_list.add(radioButton3); rbt_list.add(radioButton4); } private void setColumn() { // TODO Auto-generated method stub //创建集合存放游标 text_list = new ArrayList<TextView>(); for(int i=0;i<4;i++){ TextView textView=new TextView(MainActivity.this); textView.setBackgroundColor(Color.GRAY); textView.setVisibility(View.INVISIBLE); //设置linearlayout的属性 LinearLayout.LayoutParams params=new LayoutParams(width/4, 10); //将游标、属性添加到linearlayout中 line.addView(textView, params); //将游标存放到集合中 text_list.add(textView); } } private void setFragment() { fragment_list = new ArrayList<Fragment>(); for(int i=0;i<column.length;i++){ //创建fragment对象 MyFragment myfragment=new MyFragment(url[i],i); // //bundle传值 // Bundle bundle=new Bundle(); // bundle.putString("name", column[i]); // // myfragment.setArguments(bundle); fragment_list.add(myfragment); } } private void setPagerOnClick() { viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int arg0) { // TODO Auto-generated method stub //设置游标改变 setYouBiao(arg0); //设置导航栏文字颜色 setTextColor(arg0); } public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); } protected void setTextColor(int arg0) { // TODO Auto-generated method stub //获取当前的radiobutton RadioButton radioButton = rbt_list.get(arg0); radioButton.setTextColor(Color.RED); //获取其他的radiobutton for(int i=0;i<rbt_list.size();i++){ RadioButton radioButton5 = rbt_list.get(i); if(radioButton5!=radioButton){ radioButton5.setTextColor(Color.BLACK); } } } protected void setYouBiao(int arg0) { // TODO Auto-generated method stub //获取当前的游标 TextView textView=text_list.get(arg0); //显示当前游标 textView.setVisibility(View.VISIBLE); //隐藏其他图标 for(int i=0;i<text_list.size();i++){ TextView textView2 = text_list.get(i); if(textView2!=textView){ textView2.setVisibility(View.INVISIBLE); } } } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.rbt_1: viewPager.setCurrentItem(0); break; case R.id.rbt_2: viewPager.setCurrentItem(1); break; case R.id.rbt_3: viewPager.setCurrentItem(2); break; case R.id.rbt_4: viewPager.setCurrentItem(3); break; } } }
MyFargment
package com.bwie.fragment; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.bwie.adapter.XLvAdapter; import com.bwie.adapter.XLvAdapter2; import com.bwie.bean.Blog; import com.bwie.bean.News; import com.bwie.bean.SuperClass; import com.bwie.bean.SuperClass2; import com.bwie.test.R; import com.bwie.view.XListView; import com.bwie.view.XListView.IXListViewListener; 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; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class MyFragment extends Fragment implements IXListViewListener { String url; int p; public MyFragment(String url, int p) { super(); this.url = url; this.p = p; } int m=0; int n=0; private XListView xListView; private XLvAdapter2 adapter2; private XLvAdapter adapter1; List<News> list=new ArrayList<News>(); List<Blog> list2=new ArrayList<Blog>(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view=View.inflate(getActivity(), R.layout.fragment, null); xListView = (XListView) view.findViewById(R.id.xlv); xListView.setPullRefreshEnable(true); xListView.setPullLoadEnable(true); xListView.setXListViewListener(this); //初次加载数据 fresh(); return view; } private void fresh() { // TODO Auto-generated method stub HttpUtils utils=new HttpUtils(); n++; utils.send(HttpMethod.POST, url+n, 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 String result = arg0.result; XStream stream = new XStream(); if(p==0||p==1){ stream.processAnnotations(SuperClass.class); SuperClass superClass=(SuperClass)stream.fromXML(result); List<News> news = superClass.getNewslist().getNews(); list.addAll(0,news); adapter1 = new XLvAdapter(getActivity(), list); xListView.setAdapter(adapter1); } if(p==2||p==3){ stream.processAnnotations(SuperClass2.class); SuperClass2 superClass2=(SuperClass2) stream.fromXML(result); List<Blog> blog = superClass2.getBlogs().getBlog(); list2.addAll(0,blog); adapter2 = new XLvAdapter2(getActivity(), list2); xListView.setAdapter(adapter2); } } }); } private void load() { HttpUtils utils=new HttpUtils(); m++; utils.send(HttpMethod.POST, url+m, 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 String result = arg0.result; XStream stream = new XStream(); if(p==0||p==1){ stream.processAnnotations(SuperClass.class); SuperClass superClass=(SuperClass)stream.fromXML(result); List<News> news = superClass.getNewslist().getNews(); list.addAll(news); XLvAdapter adapter1=new XLvAdapter(getActivity(), list); adapter1.notifyDataSetChanged(); } if(p==2||p==3){ stream.processAnnotations(SuperClass2.class); SuperClass2 superClass2=(SuperClass2) stream.fromXML(result); List<Blog> blog = superClass2.getBlogs().getBlog(); list2.addAll(blog); XLvAdapter2 adapter2=new XLvAdapter2(getActivity(), list2); adapter2.notifyDataSetChanged(); } } }); } public void onRefresh() { fresh(); onLoad(); } public void onLoadMore() { // TODO Auto-generated method stub load(); onLoad(); } @SuppressLint("SimpleDateFormat") private void onLoad() { xListView.stopRefresh(); xListView.stopLoadMore(); // 设置日期格式 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 获取当前系统时间 String nowTime = df.format(new Date(System.currentTimeMillis())); // 释放时提示正在刷新时的当前时间 xListView.setRefreshTime(nowTime); } }
XListView
package com.bwie.view; import com.bwie.test.R; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.animation.DecelerateInterpolator; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Scroller; import android.widget.TextView; public class XListView extends ListView implements OnScrollListener { private float mLastY = -1; // save event y private Scroller mScroller; // used for scroll back private OnScrollListener mScrollListener; // user's scroll listener // the interface to trigger refresh and load more. private IXListViewListener mListViewListener; // -- header view private XListViewHeader mHeaderView; // header view content, use it to calculate the Header's height. And hide it // when disable pull refresh. private RelativeLayout mHeaderViewContent; private TextView mHeaderTimeView; private int mHeaderViewHeight; // header view's height private boolean mEnablePullRefresh = true; private boolean mPullRefreshing = false; // is refreashing. // -- footer view private XListViewFooter mFooterView; private boolean mEnablePullLoad; private boolean mPullLoading; private boolean mIsFooterReady = false; // total list items, used to detect is at the bottom of listview. private int mTotalItemCount; // for mScroller, scroll back from header or footer. private int mScrollBack; private final static int SCROLLBACK_HEADER = 0; private final static int SCROLLBACK_FOOTER = 1; private final static int SCROLL_DURATION = 400; // scroll back duration private final static int PULL_LOAD_MORE_DELTA = 50; // when pull up >= 50px // at bottom, trigger // load more. private final static float OFFSET_RADIO = 1.8f; // support iOS like pull // feature. /** * @param context */ public XListView(Context context) { super(context); initWithContext(context); } public XListView(Context context, AttributeSet attrs) { super(context, attrs); initWithContext(context); } public XListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initWithContext(context); } private void initWithContext(Context context) { mScroller = new Scroller(context, new DecelerateInterpolator()); // XListView need the scroll event, and it will dispatch the event to // user's listener (as a proxy). super.setOnScrollListener(this); // init header view mHeaderView = new XListViewHeader(context); mHeaderViewContent = (RelativeLayout) mHeaderView .findViewById(R.id.xlistview_header_content); mHeaderTimeView = (TextView) mHeaderView .findViewById(R.id.xlistview_header_time); addHeaderView(mHeaderView); // init footer view mFooterView = new XListViewFooter(context); // init header height mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { public void onGlobalLayout() { mHeaderViewHeight = mHeaderViewContent.getHeight(); getViewTreeObserver() .removeGlobalOnLayoutListener(this); } }); } @Override public void setAdapter(ListAdapter adapter) { // make sure XListViewFooter is the last footer view, and only add once. if (mIsFooterReady == false) { mIsFooterReady = true; addFooterView(mFooterView); } super.setAdapter(adapter); } /** * enable or disable pull down refresh feature. * * @param enable */ public void setPullRefreshEnable(boolean enable) { mEnablePullRefresh = enable; if (!mEnablePullRefresh) { // disable, hide the content mHeaderViewContent.setVisibility(View.INVISIBLE); } else { mHeaderViewContent.setVisibility(View.VISIBLE); } } /** * enable or disable pull up load more feature. * * @param enable */ public void setPullLoadEnable(boolean enable) { mEnablePullLoad = enable; if (!mEnablePullLoad) { mFooterView.hide(); mFooterView.setOnClickListener(null); //make sure "pull up" don't show a line in bottom when listview with one page setFooterDividersEnabled(false); } else { mPullLoading = false; mFooterView.show(); mFooterView.setState(XListViewFooter.STATE_NORMAL); //make sure "pull up" don't show a line in bottom when listview with one page setFooterDividersEnabled(true); // both "pull up" and "click" will invoke load more. mFooterView.setOnClickListener(new OnClickListener() { public void onClick(View v) { startLoadMore(); } }); } } /** * stop refresh, reset header view. */ public void stopRefresh() { if (mPullRefreshing == true) { mPullRefreshing = false; resetHeaderHeight(); } } /** * stop load more, reset footer view. */ public void stopLoadMore() { if (mPullLoading == true) { mPullLoading = false; mFooterView.setState(XListViewFooter.STATE_NORMAL); } } /** * set last refresh time * * @param time */ public void setRefreshTime(String time) { mHeaderTimeView.setText(time); } private void invokeOnScrolling() { if (mScrollListener instanceof OnXScrollListener) { OnXScrollListener l = (OnXScrollListener) mScrollListener; l.onXScrolling(this); } } private void updateHeaderHeight(float delta) { mHeaderView.setVisiableHeight((int) delta + mHeaderView.getVisiableHeight()); if (mEnablePullRefresh && !mPullRefreshing) { // 鏈��浜庡埛鏂扮姸鎬侊紝鏇存柊绠�ご if (mHeaderView.getVisiableHeight() > mHeaderViewHeight) { mHeaderView.setState(XListViewHeader.STATE_READY); } else { mHeaderView.setState(XListViewHeader.STATE_NORMAL); } } setSelection(0); // scroll to top each time } /** * reset header view's height. */ private void resetHeaderHeight() { int height = mHeaderView.getVisiableHeight(); if (height == 0) // not visible. return; // refreshing and header isn't shown fully. do nothing. if (mPullRefreshing && height <= mHeaderViewHeight) { return; } int finalHeight = 0; // default: scroll back to dismiss header. // is refreshing, just scroll back to show all the header. if (mPullRefreshing && height > mHeaderViewHeight) { finalHeight = mHeaderViewHeight; } mScrollBack = SCROLLBACK_HEADER; mScroller.startScroll(0, height, 0, finalHeight - height, SCROLL_DURATION); // trigger computeScroll invalidate(); } private void updateFooterHeight(float delta) { int height = mFooterView.getBottomMargin() + (int) delta; if (mEnablePullLoad && !mPullLoading) { if (height > PULL_LOAD_MORE_DELTA) { // height enough to invoke load // more. mFooterView.setState(XListViewFooter.STATE_READY); } else { mFooterView.setState(XListViewFooter.STATE_NORMAL); } } mFooterView.setBottomMargin(height); // setSelection(mTotalItemCount - 1); // scroll to bottom } private void resetFooterHeight() { int bottomMargin = mFooterView.getBottomMargin(); if (bottomMargin > 0) { mScrollBack = SCROLLBACK_FOOTER; mScroller.startScroll(0, bottomMargin, 0, -bottomMargin, SCROLL_DURATION); invalidate(); } } private void startLoadMore() { mPullLoading = true; mFooterView.setState(XListViewFooter.STATE_LOADING); if (mListViewListener != null) { mListViewListener.onLoadMore(); } } @Override public boolean onTouchEvent(MotionEvent ev) { if (mLastY == -1) { mLastY = ev.getRawY(); } switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mLastY = ev.getRawY(); break; case MotionEvent.ACTION_MOVE: final float deltaY = ev.getRawY() - mLastY; mLastY = ev.getRawY(); if (getFirstVisiblePosition() == 0 && (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) { // the first item is showing, header has shown or pull down. updateHeaderHeight(deltaY / OFFSET_RADIO); invokeOnScrolling(); } else if (getLastVisiblePosition() == mTotalItemCount - 1 && (mFooterView.getBottomMargin() > 0 || deltaY < 0)) { // last item, already pulled up or want to pull up. updateFooterHeight(-deltaY / OFFSET_RADIO); } break; default: mLastY = -1; // reset if (getFirstVisiblePosition() == 0) { // invoke refresh if (mEnablePullRefresh && mHeaderView.getVisiableHeight() > mHeaderViewHeight) { mPullRefreshing = true; mHeaderView.setState(XListViewHeader.STATE_REFRESHING); if (mListViewListener != null) { mListViewListener.onRefresh(); } } resetHeaderHeight(); } else if (getLastVisiblePosition() == mTotalItemCount - 1) { // invoke load more. if (mEnablePullLoad && mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA && !mPullLoading) { startLoadMore(); } resetFooterHeight(); } break; } return super.onTouchEvent(ev); } @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { if (mScrollBack == SCROLLBACK_HEADER) { mHeaderView.setVisiableHeight(mScroller.getCurrY()); } else { mFooterView.setBottomMargin(mScroller.getCurrY()); } postInvalidate(); invokeOnScrolling(); } super.computeScroll(); } @Override public void setOnScrollListener(OnScrollListener l) { mScrollListener = l; } public void onScrollStateChanged(AbsListView view, int scrollState) { if (mScrollListener != null) { mScrollListener.onScrollStateChanged(view, scrollState); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // send to user's listener mTotalItemCount = totalItemCount; if (mScrollListener != null) { mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } } public void setXListViewListener(IXListViewListener l) { mListViewListener = l; } /** * you can listen ListView.OnScrollListener or this one. it will invoke * onXScrolling when header/footer scroll back. */ public interface OnXScrollListener extends OnScrollListener { public void onXScrolling(View view); } /** * implements this interface to get refresh/load more event. */ public interface IXListViewListener { public void onRefresh(); public void onLoadMore(); } }
XListViewHeader
package com.bwie.view; import com.bwie.test.R; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; public class XListViewHeader extends LinearLayout { private LinearLayout mContainer; private ImageView mArrowImageView; private ProgressBar mProgressBar; private TextView mHintTextView; private int mState = STATE_NORMAL; private Animation mRotateUpAnim; private Animation mRotateDownAnim; private final int ROTATE_ANIM_DURATION = 180; public final static int STATE_NORMAL = 0; public final static int STATE_READY = 1; public final static int STATE_REFRESHING = 2; public XListViewHeader(Context context) { super(context); initView(context); } /** * @param context * @param attrs */ public XListViewHeader(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } private void initView(Context context) { // 鍒濆�鎯呭喌锛岃�缃�笅鎷夊埛鏂皏iew楂樺害涓�0 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, 0); mContainer = (LinearLayout) LayoutInflater.from(context).inflate( R.layout.xlistview_header, null); addView(mContainer, lp); setGravity(Gravity.BOTTOM); mArrowImageView = (ImageView)findViewById(R.id.xlistview_header_arrow); mHintTextView = (TextView)findViewById(R.id.xlistview_header_hint_textview); mProgressBar = (ProgressBar)findViewById(R.id.xlistview_header_progressbar); mRotateUpAnim = new RotateAnimation(0.0f, -180.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); mRotateUpAnim.setDuration(ROTATE_ANIM_DURATION); mRotateUpAnim.setFillAfter(true); mRotateDownAnim = new RotateAnimation(-180.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); mRotateDownAnim.setDuration(ROTATE_ANIM_DURATION); mRotateDownAnim.setFillAfter(true); } public void setState(int state) { if (state == mState) return ; if (state == STATE_REFRESHING) { // 鏄剧ず杩涘害 mArrowImageView.clearAnimation(); mArrowImageView.setVisibility(View.INVISIBLE); mProgressBar.setVisibility(View.VISIBLE); } else { // 鏄剧ず绠�ご鍥剧墖 mArrowImageView.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.INVISIBLE); } switch(state){ case STATE_NORMAL: if (mState == STATE_READY) { mArrowImageView.startAnimation(mRotateDownAnim); } if (mState == STATE_REFRESHING) { mArrowImageView.clearAnimation(); } mHintTextView.setText(R.string.xlistview_header_hint_normal); break; case STATE_READY: if (mState != STATE_READY) { mArrowImageView.clearAnimation(); mArrowImageView.startAnimation(mRotateUpAnim); mHintTextView.setText(R.string.xlistview_header_hint_ready); } break; case STATE_REFRESHING: mHintTextView.setText(R.string.xlistview_header_hint_loading); break; default: } mState = state; } public void setVisiableHeight(int height) { if (height < 0) height = 0; LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContainer .getLayoutParams(); lp.height = height; mContainer.setLayoutParams(lp); } public int getVisiableHeight() { return mContainer.getLayoutParams().height; } }
XListViewFooter
package com.bwie.view; import com.bwie.test.R; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; public class XListViewFooter extends LinearLayout { public final static int STATE_NORMAL = 0; public final static int STATE_READY = 1; public final static int STATE_LOADING = 2; private Context mContext; private View mContentView; private View mProgressBar; private TextView mHintView; public XListViewFooter(Context context) { super(context); initView(context); } public XListViewFooter(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public void setState(int state) { mHintView.setVisibility(View.INVISIBLE); mProgressBar.setVisibility(View.INVISIBLE); mHintView.setVisibility(View.INVISIBLE); if (state == STATE_READY) { mHintView.setVisibility(View.VISIBLE); mHintView.setText(R.string.xlistview_footer_hint_ready); } else if (state == STATE_LOADING) { mProgressBar.setVisibility(View.VISIBLE); } else { mHintView.setVisibility(View.VISIBLE); mHintView.setText(R.string.xlistview_footer_hint_normal); } } public void setBottomMargin(int height) { if (height < 0) return ; LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mContentView.getLayoutParams(); lp.bottomMargin = height; mContentView.setLayoutParams(lp); } public int getBottomMargin() { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mContentView.getLayoutParams(); return lp.bottomMargin; } /** * normal status */ public void normal() { mHintView.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.GONE); } /** * loading status */ public void loading() { mHintView.setVisibility(View.GONE); mProgressBar.setVisibility(View.VISIBLE); } /** * hide footer when disable pull load more */ public void hide() { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mContentView.getLayoutParams(); lp.height = 0; mContentView.setLayoutParams(lp); } /** * show footer */ public void show() { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mContentView.getLayoutParams(); lp.height = LayoutParams.WRAP_CONTENT; mContentView.setLayoutParams(lp); } private void initView(Context context) { mContext = context; LinearLayout moreView = (LinearLayout)LayoutInflater.from(mContext).inflate(R.layout.xlistview_footer, null); addView(moreView); moreView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); mContentView = moreView.findViewById(R.id.xlistview_footer_content); mProgressBar = moreView.findViewById(R.id.xlistview_footer_progressbar); mHintView = (TextView)moreView.findViewById(R.id.xlistview_footer_hint_textview); } }
简写Bean包
package com.bwie.vo; import java.io.Serializable; import java.util.List; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; @XStreamAlias("oschina") public class XmlBean 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; } }
MainActivity 的布局
<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/radioGroup" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/ly" android:layout_width="match_parent" android:layout_height="wrap_content" > <RadioButton android:id="@+id/rbt_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="资讯" android:textSize="25sp" android:button="@null" android:gravity="center" /> <RadioButton android:id="@+id/rbt_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="热点" android:textSize="25sp" android:button="@null" android:gravity="center" /> <RadioButton android:id="@+id/rbt_3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="博客" android:textSize="25sp" android:button="@null" android:gravity="center" /> <RadioButton android:id="@+id/rbt_4" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="推荐" android:textSize="25sp" android:button="@null" android:gravity="center" /> </LinearLayout> </RadioGroup> <LinearLayout android:id="@+id/line" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/radioGroup" ></LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/line" ></android.support.v4.view.ViewPager> </RelativeLayout>