APP市場中大多數(shù)新聞App都有導(dǎo)航菜單徘层,導(dǎo)航菜單是一組標(biāo)簽的集合,在新聞客戶端中,每個標(biāo)簽標(biāo)示一個新聞類別肋乍,對應(yīng)下面ViewPager控件的一個分頁面,今日頭條, 網(wǎng)易新聞等。
話不多說直接先上原型圖擒悬,如圖1,圖2稻艰,圖3懂牧。
image
image
image
首先是新聞Fragment:
import java.io.File;
import java.nio.channels.Channel;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ClearCacheRequest;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.juronggvo.R;
import com.juronggvo.adapter.ExerciseAdapter;
import com.juronggvo.adapter.NewsAdapter;
import com.juronggvo.adapter.PageFragmentAdapter;
import com.juronggvo.bean.NewsBean;
import com.juronggvo.data.Config;
import com.juronggvo.data.Contants;
import com.juronggvo.data.GlobalData;
import com.juronggvo.ui.inform.InformActivity;
import com.juronggvo.ui.news.NewsActivity;
import com.juronggvo.utils.Utils;
import com.juronggvo.widget.MyListView;
import com.juronggvo.widget.NewsTitleTextView;
import com.juronggvo.widget.NewsViewPagerAdapter;
import com.juronggvo.widget.PullToRefreshView;
import com.juronggvo.widget.PullToRefreshView.OnFooterRefreshListener;
import com.juronggvo.widget.PullToRefreshView.OnHeaderRefreshListener;
import android.R.bool;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Global;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.LayoutParams;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
* 新聞資訊
* @description
* @data 2016年12月13日
* @author yang.yang
*/
public class NewsFragment extends Fragment implements OnPageChangeListener {
private RadioGroup rgChannel;
private View view;
private ViewPager viewPager;
private HorizontalScrollView hvChannel;
private PageFragmentAdapter adapter=null;
private int page = 1 ;
private Object newsLists;
private ListfragmentList=new ArrayList();
private RequestQueue requestQueue =null;
private ExerciseAdapter newsAdapter;
private Handler handler = new Handler() ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_new, container, false);
return view ;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init() ;
setTab(Config.newsPosition,true);
}
private void init(){
requestQueue = Volley.newRequestQueue(getActivity());
rgChannel=(RadioGroup)view.findViewById(R.id.rgChannel);
viewPager=(ViewPager)view.findViewById(R.id.vpNewsList);
hvChannel=(HorizontalScrollView)view.findViewById(R.id.hvChannel);
rgChannel.setOnCheckedChangeListener(
new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group,
int checkedId) {
viewPager.setCurrentItem(checkedId);
}
});
viewPager.setOnPageChangeListener(this);
initTab();//動態(tài)產(chǎn)生RadioButton
initViewPager();
}
private void initTab(){
ListchannelList=ChannelDb.getSelectedChannel();
for(int i=0;i<channelList.size();i++){
RadioButton rb=(RadioButton)LayoutInflater.from(getActivity()).
inflate(R.layout.tab_rb, null);
rb.setId(i);
rb.setText(channelList.get(i));
RadioGroup.LayoutParams params=new
RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT,
RadioGroup.LayoutParams.WRAP_CONTENT);
rgChannel.addView(rb,params);
}
}
private void initViewPager(){
adapter=new PageFragmentAdapter(super.getFragmentManager());
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(0);
}
/**
* 滑動ViewPager時調(diào)整ScroollView的位置以便顯示按鈕
* @param idx
*/
private void setTab(final int idx,boolean flag){
RadioButton rb=(RadioButton)rgChannel.getChildAt(idx);
rb.setChecked(true);
int left=rb.getLeft();
int width=rb.getMeasuredWidth();
DisplayMetrics metrics=new DisplayMetrics();
super.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWidth=metrics.widthPixels;
final int len=left+width/2-screenWidth/2;
hvChannel.smoothScrollTo(len, 0);//滑動ScroollView
System.out.println("len====="+len);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
setTab(position,false);
}
}
其中要用的fragment_new.xml
image
image
ChannelDb 類
import java.nio.channels.Channel;
import java.util.ArrayList;
import java.util.List;
public class ChannelDb {
private static ListselectedChannel=new ArrayList();
static{
selectedChannel.add("熱點(diǎn)資訊");
selectedChannel.add("開發(fā)區(qū)概括");
selectedChannel.add("最新動態(tài)");
selectedChannel.add("文化生活");
selectedChannel.add("旅游景點(diǎn)");
selectedChannel.add("句容資訊");
selectedChannel.add("黨建園地");
selectedChannel.add("重點(diǎn)工程");
}
public static ListgetSelectedChannel(){
return selectedChannel;
}
}
tab_rb.xml
image
PageFragmentAdapter 類
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class PageFragmentAdapter extends FragmentPagerAdapter{
private String[] tabs = { "熱點(diǎn)資訊", "開發(fā)區(qū)概括","最新動態(tài)","文化生活","旅游景點(diǎn)","句容資訊","黨建園地","重點(diǎn)工程" };
private FragmentManager fm;
public PageFragmentAdapter(FragmentManager fm ){
super(fm);
this.fm=fm;
}
/**
* 返回每頁對應(yīng)的fragment的對象
*/
@Override
public Fragment getItem(int position) {
return NewsFragmentFactory.create(position);
}
@Override
public int getCount() {
return tabs.length;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //沒有找到child要求重新加載
}
}
NewsFragmentFactory類
import com.juronggvo.ui.fragment.ApplyCarFragment;
import com.juronggvo.ui.fragment.ApplyMeetingFragment;
import com.juronggvo.ui.fragment.CulLifeFragment;
import com.juronggvo.ui.fragment.DevoAreFragment;
import com.juronggvo.ui.fragment.HotpointFragment;
import com.juronggvo.ui.fragment.ImportantProFragment;
import com.juronggvo.ui.fragment.JuRongFragment;
import com.juronggvo.ui.fragment.NewRecentFragment;
import com.juronggvo.ui.fragment.PartyBuildFragment;
import com.juronggvo.ui.fragment.TravelFragment;
import android.support.v4.app.Fragment;
public class NewsFragmentFactory {
/**
* 根據(jù)不同的position生產(chǎn)對應(yīng)的fragment對象
* @param position
* @return
*/
public static Fragment create(int position){
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HotpointFragment();
break;
case 1:
fragment = new DevoAreFragment();
break;
case 2:
fragment = new NewRecentFragment();
break;
case 3:
fragment = new CulLifeFragment();
break;
case 4:
fragment = new TravelFragment();
break;
case 5:
fragment = new JuRongFragment();
break;
case 6:
fragment = new PartyBuildFragment();
break;
case 7:
fragment = new ImportantProFragment();
break;
}
return fragment;
}
}
然后在每個pager頁面寫你自己要的數(shù)據(jù) 就可以了。
偉大的哲學(xué)家我自己曾經(jīng)說過尊勿,有夢想就要大聲說出來 僧凤,萬丈高樓平地起用狱,能不能行靠自己!