Android开发ViewPager和Framgment结合使用实现新闻类app(三)
提示:因为该新闻app已经基本完成,所以下方代码量较大,请谨慎!或者从 ViewPager和Fragment结合使用实现新闻类app(一)一步步向下看!
经过几天的努力,不断地对之前的代码进行完善,终于基本完成了该新闻类app的雏形!下面和大家分享一下该成果了。先看看显示效果:
怎么样,效果还可以吧!下面就直接上代码了:
下面是显示界面的主Activity:
public class BaseActivity extends FragmentActivity {
protected ViewPager viewPager;
protected MyLinearLayout mly;
protected MyOnPageChangedListener onPageChangedListener;
//自定义ViewPager的标题;
protected ArrayList<String> list = new ArrayList<String>();
protected String[]a =new String[]{"头条","社会","国内","国际","娱乐","体育","军事","科技","财经","时尚"};
protected List<MyFragment> fragmentList = new ArrayList<MyFragment>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
init();
}
private ListViewUtils listViewUtils;
private AllNewsData allNewsData;
private void init() {
listViewUtils=new ListViewUtils();
allNewsData=new AllNewsData();
viewPager= (ViewPager) findViewById(R.id.viewPager);
//设置ViewPager的缓存的页数的个数,缓存页面4个左右不影响加载速度,而且可以节省流量,挺不错的。
viewPager.setOffscreenPageLimit(4);
mly = (MyLinearLayout) findViewById(R.id.myLinearLayout);
onPageChangedListener=new MyOnPageChangedListener(mly);
initList();
getFragmentList();
getTabTitleList();
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(onPageChangedListener);
setonLinerTitleClickListener(mly);
setViewPagerScrollSpeed();
}
//这个方法也是在(三)中新增的,通过反射的方法,来改变setCurrentItem()后,ViewPager的滚动速度
private void setViewPagerScrollSpeed( ) {
try {
Field mScroller = null;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
MyOnViewPagerScroller scroller = new MyOnViewPagerScroller(viewPager.getContext());
mScroller.set(viewPager, scroller);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
private void initList(){
for(int i=0;i<a.length;i++){
list.add(a[i]);
}
}
private void getTabTitleList() {
mly.createTextView( list);
}
private void getFragmentList() {
for (int i = 0; i < list.size(); i++) {
fragmentList.add(MyFragment.getnewInstance(i));
}
}
//ViewPager的适配器
private FragmentPagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public android.support.v4.app.Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
};
private int currentPosition;
//为自定义的标题栏中的TextView绑定监听事件。
private void setonLinerTitleClickListener(final MyLinearLayout ly){
for( int i=0;i<ly.getChildCount();i++){
currentPosition=i;
final TextView tv= (TextView) ly.getChildAt(currentPosition);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("onclick", currentPosition + "");
viewPager.setCurrentItem(ly.a.get(tv),true);
}
});
}
}
}
下面是每个新闻列表的Fragment:
public class MyFragment extends Fragment {
//该Fragment就是显示新闻列表的Fragment
private int position;
private MyFragment(int position) {
this.position = position;
}
public static MyFragment getnewInstance(int position) {
retu