compile 'com.android.support:design:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile 'com.github.bumptech.glide:glide:3.7.0'
需要导入的依赖
//布局如下Main
<?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"> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"></FrameLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:background="#FFFFFF" android:orientation="horizontal"> <LinearLayout android:id="@+id/first_layout" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_centerVertical="true" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@android:drawable/ic_menu_compass" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="消息" android:textColor="#7597B3" /> </LinearLayout> <LinearLayout android:id="@+id/second_layout" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_centerVertical="true" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@android:drawable/ic_menu_agenda" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="发现" android:textColor="#7597B3" /> </LinearLayout> <LinearLayout android:id="@+id/third_layout" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_centerVertical="true" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@android:drawable/ic_menu_edit" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="记录" android:textColor="#7597B3" /> </LinearLayout> <LinearLayout android:id="@+id/fourth_layout" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_centerVertical="true" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@android:drawable/ic_menu_myplaces" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="我的" android:textColor="#7597B3" /> </LinearLayout> </LinearLayout> </LinearLayout>
//第一个fragment布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:id="@+id/mytab" android:layout_width="match_parent" android:layout_height="wrap_content"/> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> </LinearLayout>//home中加入cyclerview<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>//item<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>//
//VIew中实现的代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private LinearLayout firstLayout; private LinearLayout secondLayout; private LinearLayout thirdLayout; private LinearLayout fourthLayout; private android.support.v4.app.FragmentTransaction transaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); firstLayout = (LinearLayout) findViewById(R.id.first_layout); secondLayout = (LinearLayout) findViewById(R.id.second_layout); thirdLayout = (LinearLayout) findViewById(R.id.third_layout); fourthLayout = (LinearLayout) findViewById(R.id.fourth_layout); firstLayout.setOnClickListener(this); secondLayout.setOnClickListener(this); thirdLayout.setOnClickListener(this); fourthLayout.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.first_layout: FragmentManager manager1 = getSupportFragmentManager(); transaction = manager1.beginTransaction(); transaction.replace(R.id.content,new OneFragment()); transaction.commit(); break; case R.id.second_layout: FragmentManager manager2 = getSupportFragmentManager(); transaction = manager2.beginTransaction(); transaction.replace(R.id.content,new TwoFragment()); transaction.commit(); break; case R.id.third_layout: FragmentManager manager3 = getSupportFragmentManager(); transaction = manager3.beginTransaction(); transaction.replace(R.id.content,new ThreeFragment()); transaction.commit(); break; case R.id.fourth_layout: FragmentManager manager4 = getSupportFragmentManager(); transaction = manager4.beginTransaction(); transaction.replace(R.id.content,new FourFragment()); transaction.commit(); break; } } }
//第一个页面Fragment
public class OneFragment extends android.support.v4.app.Fragment { TabLayout mytab; ViewPager viewPager; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.fragment_one,null); mytab = (TabLayout)view. findViewById(R.id.mytab); viewPager = (ViewPager) view.findViewById(R.id.viewpager); initData(); return view; } private void initData() { List<Fragment> list = new ArrayList<>(); for (int i = 0; i <7 ;i++){ list.add(new HomeFragment()); } MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager()); adapter.setList(list); viewPager.setAdapter(adapter); for (int i = 0 ;i<7;i++){ mytab.addTab(mytab.newTab()); } mytab.setupWithViewPager(viewPager); mytab.getTabAt(0).setText("沪深"); mytab.getTabAt(1).setText("板块"); mytab.getTabAt(2).setText("指数"); mytab.getTabAt(3).setText("港股"); mytab.getTabAt(4).setText("新三板"); mytab.getTabAt(5).setText("商品"); mytab.getTabAt(6).setText("其他"); mytab.setTabMode(TabLayout.MODE_SCROLLABLE); } }
//定义一个Iview接口
public interface IView { void getData(List<MyBean.DataBean> list); }
//HOmeFragment显示图片和数据
public class HomeFragment extends Fragment implements IView{ private RecyclerView recyclerView; private IPresenter iPresenter; private List<MyBean.DataBean> data; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.fragment_home,null); recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); IPresenter iPresenter = new IPresenter(this); iPresenter.getUri(Api.URL); //initData(); return view; } @Override public void getData(List<MyBean.DataBean> list) { recyclerView.setAdapter(new MyAdapter(list,getActivity())); } }
//其他Fragment随便写
public class ThreeFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.fragment_three,null); return view; } }
//Presenter写一个Api
public class Api { public static final String URL = "http://api.expoon.com/AppNews/getNewsList/"; }
//定义一个Presenter类进行交互
public class IPresenter implements Model.OnFinish{ IView iView; Model model; public IPresenter(IView iView) { this.iView = iView; this.model = new Model(); model.setOnFinish(this); } public void getUri(String url){ model.getUrl(url); } @Override public void OnFinishListener(List<MyBean.DataBean> list) { iView.getData(list); } }
//Modle请求
public interface ApiService { @GET("type/1/p/1") Observable<MyBean> getbean(); }//另一个接口public interface IModel{ void getUrl(String url); }//定义Model类public class Model implements IModel{ List<MyBean.DataBean> list; OnFinish onFinish; public interface OnFinish{ void OnFinishListener(List<MyBean.DataBean> list); } public void setOnFinish(OnFinish onFinish){ this.onFinish = onFinish; } @Override public void getUrl(String url) { list = new ArrayList<>(); Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.URL).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build(); ApiService apiService = retrofit.create(ApiService.class); Observable<MyBean> bean = apiService.getbean(); bean.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<MyBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(MyBean myBean) { List<MyBean.DataBean> data = myBean.getData(); onFinish.OnFinishListener(data); } }); } }
//Bean类接口数据,这里就不写了
//适配器,用的是Glide请求图片RecyclerView展示
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{ List<MyBean.DataBean> list = new ArrayList<>(); Context context; public MyAdapter(List<MyBean.DataBean> list, Context context) { this.list = list; this.context = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder= null; View view = View.inflate(context, R.layout.fragment_home_item,null); holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(list.get(position).getNews_summary()); Glide.with(context) .load(list.get(position).getPic_url()) .into(holder.img); } @Override public int getItemCount() { return list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder{ ImageView img; TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); img = (ImageView) itemView.findViewById(R.id.img); } } }
//Fragment适配器
public class MyFragmentAdapter extends FragmentPagerAdapter{ public MyFragmentAdapter(FragmentManager fm) { super(fm); } List<Fragment> list = new ArrayList<>(); public void setList(List<Fragment> lists) { list = lists; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }