您的位置:首页 > 理论基础 > 计算机网络

使用BottomTabBar实现底部导航,MVP网络框架,retrofit解析

2017-11-05 20:39 911 查看
加依赖

compile 'com.hjm:BottomTabBar:1.1.1'
compile 'com.android.support:design:26.0.0-alpha1'
compile 'com.android.support:recyclerview-v7:26.+'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
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'


主页面

public class MainActivity extends AppCompatActivity {

private BottomTabBar mb;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mb =(BottomTabBar)findViewById(R.id.bottom_tab_bar);

mb.init(getSupportFragmentManager())
.setImgSize(50,50)
.setFontSize(14)
.setTabPadding(4,6,10)
.setChangeColor(Color.RED,Color.DKGRAY)
.addTabItem("首页",R.drawable.a_w, Fragment01.class)
.addTabItem("自选",R.drawable.a8u, Fragment02.class)
.addTabItem("行情",R.drawable.a9p, Fragment03.class)
.a
4000
ddTabItem("资讯",R.drawable.a9v, Fragment04.class)
.isShowDivider(false)
.setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {
@Override
public void onTabChange(int position, String name) {

}
});

}
}


Fragment_04

public class Fragment04 extends Fragment {

private View view;
private TabLayout tab;
private String[] name=new String[]{"数据新闻","快讯","头条","精编公告","美股","港股","基金","理财"};
private List<Fragment> list;
private ViewPager viewpager;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_04, null);
tab = view.findViewById(R.id.tab);
viewpager = view.findViewById(R.id.viewpager);
setTab();
viewpager.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return list.get(position);
}

@Override
public int getCount() {
return list.size();
}

@Override
public CharSequence getPageTitle(int position) {
return name[position];
}
});

tab.setupWithViewPager(viewpager);
return view;
}
private void setTab(){
for (int i = 0; i < 8; i++) {
tab.addTab(tab.newTab().setText(name[i]));
}
list = new ArrayList<>();
for (int i = 0; i <8 ; i++) {
list.add(new ZixunFragment());
}
}
}


ZixunFragment

public class ZixunFragment extends Fragment implements Iview{

private View view;

private RecyclerView recycler;

int P=1;
private Myadapter adapter;
private SwipeRefreshLayout swif;
private LinearLayoutManager linearLayoutManager;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_zixun, null);
swif = (SwipeRefreshLayout) view.findViewById(R.id.swif);
recycler = view.findViewById(R.id.recycler);
linearLayoutManager = new LinearLayoutManager(getContext());
recycler.setLayoutManager(linearLayoutManager);
Persenter persenter=new Persenter(this);
persenter.getok(Api.BASE_PATH+P);
return view;
}

@Override
public void showsuccess(final List<Bean.DataBean> list) {
recycler.setLayoutManager(linearLayoutManager);
adapter = new Myadapter(getContext(),list);
recycler.setAdapter(adapter);
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
if (lastVisibleItemPosition==list.size()-1){
P++;
showsuccess(list);
adapter.notifyDataSetChanged();
}
}
});
swif.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
P++;
showsuccess(list);
adapter.notifyDataSetChanged();
swif.setRefreshing(false);
}
});
}

@Override
public void error(String rr) {

}
}


MyAdapter

public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder> {
Context context;
List<Bean.DataBean> list;
private View view;

public Myadapter(Context context, List<Bean.DataBean> list) {
this.context = context;
this.list = list;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
view = View.inflate(context, R.layout.item, null);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Glide.with(context).load(list.get(position).pic_url).into(holder.image);
holder.tv.setText(list.get(position).news_title);

}
@Override
public int getItemCount() {
return list.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public View rootView;
public ImageView image;
public TextView tv;
public ViewHolder(View rootView) {
super(rootView);
this.rootView = rootView;
this.image = (ImageView) rootView.findViewById(R.id.image);
this.tv = (TextView) rootView.findViewById(R.id.tv);
}

}
}


public class Api {
public static  final  String BASE_PATH = "http://api.expoon.com/";

//    public static final String BASE_URL = "https://api.github.com/";
//    public static final String HOME_URL="http://api.expoon.com/AppNews/getNewsList/";

}


public interface ApiService {

@GET("AppNews/getNewsList/type/1/p/")
rx.Observable<Bean> getNoParams();

}


public class Bean {
public int status;
public String info;
public List<DataBean> data;

public static Bean objectFromData(String str) {

return new Gson().fromJson(str, Bean.class);
}

public static class DataBean {
public String news_id;
public String news_title;
public String news_summary;
public String pic_url;

public static DataBean objectFromData(String str) {

return new Gson().fromJson(str, DataBean.class);
}
}
}


public interface Imodel {
void  Request(String url, Onclick onclick);
}


public class Model implements Imodel {

private Retrofit retrofit;
private ApiService apiService;
private Observable<Bean> noParams;

@Override
public void Request(String url, final Onclick onclick) {
retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_PATH)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//通过动态代理得到网络接口对象
apiService = retrofit.create(ApiService.class);
noParams = apiService.getNoParams();

noParams.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Bean>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {
onclick.error(e.getMessage().toString());
}

@Override
public void onNext(Bean bean) {
List<Bean.DataBean> data = bean.data;
onclick.datasuccess(data);
}
});

}
}


public interface Onclick {
void  datasuccess(List<Bean.DataBean> list);
void  error(String rr);

}


public class Persenter  {
Imodel imodel;
Iview iview;

public Persenter( Iview iview) {

this.iview = iview;
imodel=new Model();
}
public  void getok(String url){
imodel.Request(url, new Onclick() {
@Override
public void datasuccess(List<Bean.DataBean> list) {
iview.showsuccess(list);
}

@Override
public void error(String rr) {
iview.error(rr);
}
});

}
}


public interface Iview {
void   showsuccess(List<Bean.DataBean> bean);
void  error(String rr);

}


主页面的布局

<com.hjm.bottomtabbar.BottomTabBar
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bottom_tab_bar"
></com.hjm.bottomtabbar.BottomTabBar>


fragment_04

<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"
android:id="@+id/tab"></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpager"></android.support.v4.view.ViewPager>


fragment_zixun

<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swif"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>


item

<ImageView
android:id="@+id/image"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@mipmap/ic_launcher"
/>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="附件的方式的发送到"
android:layout_gravity="center"
/>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: