//清单文件添加网络和name权限
//xml文件
//main
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="bw.com.bw_day18.MainActivity"
android:id="@+id/dl_id"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tool_bar_id"
/>
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_below="@id/tool_bar_id"
android:id="@+id/tab_layout_id"
app:tabIndicatorHeight="4dp"
app:tabSelectedTextColor="@color/colorAccent" />
<android.support.v4.view.ViewPager
android:id="@+id/view_pager_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tab_layout_id"/>
</RelativeLayout>
<android.support.design.widget.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nv_id"
android:layout_gravity = "left"
app:headerLayout="@layout/heard_layout"
app:menu="@menu/navigation_selection"
/>
</android.support.v4.widget.DrawerLayout>
//fragement
<FrameLayout 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="bw.com.bw_day18.MyFragment">
<!-- TODO: Update blank fragment layout -->
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv"/>
</FrameLayout>
//头部
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="250dp">
<ImageView
android:layout_width="176dp"
android:layout_height="176dp"
android:layout_centerInParent="true"
android:id="@+id/iv_id"
android:src="@mipmap/lf"
/>
<TextView
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="八维1509B"
android:layout_centerInParent="true"
android:textSize="30sp"
android:textColor="@color/colorAccent"
android:layout_below="@id/iv_id"/>
</RelativeLayout>
//条目布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/item_iv"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerVertical="true"
fresco:placeholderImage="@mipmap/ic_launcher"
fresco:roundedCornerRadius="10dp"
fresco:roundTopLeft="true"
fresco:roundTopRight="true"
fresco:roundBottomLeft="true"
fresco:roundBottomRight="true"/>
<TextView
android:id="@+id/subject_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="subject"
android:layout_toRightOf="@id/item_iv"
android:layout_centerVertical="true"
android:textSize="20sp"
android:layout_marginLeft="10dp"
/>
</RelativeLayout>
//主方法
package bw.com.bw_day18;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Toolbar mToolBar;
private TabLayout mTabLayout;
private ViewPager mViewPager;
private NavigationView mNavigationView;
private List<Fragment> fragments;
private List<String> titles;
private MyAdapter adapter;
private DrawerLayout mDl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//取消ActionBar
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//控件初始化
initView();
//显示ToolBar
mToolBar.setNavigationIcon(R.mipmap.ic_launcher);
mToolBar.setTitle("我是一个ToolBar");
mToolBar.inflateMenu(R.menu.main);
//点击图标, 打开抽屉
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDl.openDrawer(Gravity.LEFT);//打开抽屉
}
});
//每个条目的处理mToolBar.setOnMenuItemClickListener();
//TabLayout + ViewPager + Fragment
//初始化数据源
initData();
adapter = new MyAdapter(getSupportFragmentManager());
mViewPager.setAdapter(adapter);
//把TabLayout和ViewPager 联系到一起
mTabLayout.setupWithViewPager(mViewPager);
//设置TabLayout的滑动模式 mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
//NavigationView中的获取
//可以获取头部视图 View headerView = mNv.getHeaderView(0);
//为菜单项设置点击事件 mNavigationView.setNavigationItemSelectedListener();
}
private void initView() {
mDl = (DrawerLayout) findViewById(R.id.dl_id);
mToolBar = (Toolbar) findViewById(R.id.tool_bar_id);
mTabLayout = (TabLayout) findViewById(R.id.tab_layout_id);
mViewPager = (ViewPager) findViewById(R.id.view_pager_id);
mNavigationView = (NavigationView) findViewById(R.id.nv_id);
}
private void initData() {
fragments = new ArrayList<>();
for(int i = 0;i<3;i++)
{
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putInt("tabId",i);
fragment.setArguments(bundle);
fragments.add(fragment);
}
titles = new ArrayList<>();
titles.add("头条");
titles.add("娱乐");
titles.add("体育");
}
//自定义的Fragment + ViewPager 的适配器
class MyAdapter extends FragmentPagerAdapter
{
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
//返回当前显示内容的标题信息
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
}
//初始化fresco
/**
* Created by Administrator on 2017/11/18.
*/
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化Fresco
Fresco.initialize(this);
}
}
//fragment方法
public class MyFragment extends Fragment {
private ListView mLv;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my,container,false);
mLv = (ListView) view.findViewById(R.id.lv);
//获取传入的参数, 决定加载那个地址的内容
int tabId = getArguments().getInt("tabId");
//-------Retrofit 加载数据-------
//导入依赖 -- 接口 (Call<数据返回实体类> 方法) -- 数据返回实体类
//声明Retrofit
//建造者
Retrofit.Builder builder = new Retrofit.Builder();
//设置公共的地址
builder.baseUrl("http://litchiapi.jstv.com/");
//构建剩余的路径中的参数列表
ArrayMap<String,String> map = new ArrayMap<>();
switch (tabId)
{
case 0:
//column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41
map.put("column","0");
break;
case 1:
//column=7&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41
map.put("column","7");
break;
case 2:
//column=6&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41
map.put("column","6");
break;
}
map.put("PageSize","20");
map.put("pageIndex","1");
map.put("val","100511D3BE5301280E0992C73A9DEC41");
//因为要解析json数据, 所以gson解析
builder.addConverterFactory(GsonConverterFactory.create());
//得到Retrofit对象
Retrofit retrofit = builder.build();
//获得接口中的方法
//得到接口
NewInterface filmInter = retrofit.create(NewInterface.class);
Call<NewsInfo> call = filmInter.getNewInfo(map);
call.enqueue(new Callback<NewsInfo>() {
@Override
public void onResponse(Call<NewsInfo> call, Response<NewsInfo> response) {
//主线程中
//得到获取的数据
NewsInfo newInfo = response.body();
List<NewsInfo.ParamzBean.FeedsBean> data = newInfo.getParamz().getFeeds();
MyListAdapter adapter = new MyListAdapter(data);
mLv.setAdapter(adapter);
}
@Override
public void onFailure(Call<NewsInfo> call, Throwable t) {
}
});
return view;
}
class MyListAdapter extends BaseAdapter
{
private List<NewsInfo.ParamzBean.FeedsBean> data;
private MyListAdapter(List<NewsInfo.ParamzBean.FeedsBean> data)
{
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null)
{
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_lv,null);
viewHolder = new ViewHolder();
viewHolder.iv = (SimpleDraweeView) convertView.findViewById(R.id.item_iv);
viewHolder.subject = (TextView) convertView.findViewById(R.id.subject_id);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
}
//从数据源中, 获取当前显示的条目
NewsInfo.ParamzBean.FeedsBean feedsBean = data.get(position);
//利用Fresco 加载图片
viewHolder.iv.setImageURI(Uri.parse("http://litchiapi.jstv.com"+ feedsBean.getData().getCover()));
viewHolder.subject.setText(feedsBean.getData().getSubject());
return convertView;
}
class ViewHolder
{
SimpleDraweeView iv;
TextView subject;
}
}
}
//获取数据接口
/**
* 获取数据的接口
* Created by Administrator on 2017/11/18.
*/
public interface NewInterface {
//公共地址 baseUrl --------------- 不同的地址 (@GET(....)) ----参数信息(方法的参数列表)
//http://litchiapi.jstv.com/---------api/GetFeeds---?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41
//http://litchiapi.jstv.com/---------api/GetFeeds---?column=7&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41
@GET("api/GetFeeds")
Call<NewsInfo> getNewInfo(@QueryMap ArrayMap<String,String> map);
}
//字符串实体类
public class NewsInfo {
//快捷键实现
}