效果图
代码:
main_activity.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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.day22_demo.MainActivity"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="60dp" android:id="@+id/tab_layout_id" app:tabSelectedTextColor="@color/colorAccent" app:tabIndicatorColor="@color/colorAccent" /> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/view_page_id" android:layout_below="@id/tab_layout_id" /> </RelativeLayout>
fragment_my.xml
<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.day22_demo.MyFragment"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv_id"/> </FrameLayout>
item_lv.xml
<?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"> <ImageView android:layout_width="200dp" android:layout_height="200dp" android:id="@+id/iv" android:src="@mipmap/ic_launcher"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="title" android:id="@+id/tv_id" android:textSize="20sp" android:layout_margin="10dp"/> </LinearLayout>
MyApp.java
import android.app.Application; import org.xutils.x; /** * Created by Administrator on 2017/11/23. */ public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); //初始化xUtils x.Ext.init(this); x.Ext.setDebug(true); } }
清单文件
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <application android:name=".MyApp" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
MainActivity.java
import android.os.Bundle; 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.v7.app.AppCompatActivity; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private TabLayout mTb; private List<String> titles = new ArrayList<>(); private ViewPager mVp; private List<MyFragment> data; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //初始化数据 data = new ArrayList<>(); for(int i = 0;i<3;i++) { MyFragment fragment = new MyFragment(); //向fragment 中传入参数 Bundle bundle = new Bundle(); bundle.putInt("tabId",i); fragment.setArguments(bundle); data.add(fragment); } //初始化标题 titles.add("头条"); titles.add("娱乐"); titles.add("体育"); //初始化适配器 adapter = new MyAdapter(getSupportFragmentManager()); //设置适配器 mVp.setAdapter(adapter); //关联ViewPager 和 TabLayout mTb.setupWithViewPager(mVp); //为TabLayout 设置监听器 setTitle("头条");//设置Activity 标题的方法 mTb.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { String tabName = tab.getText().toString(); setTitle(tabName); } @Override public void onTabUnselected(TabLayout.Tab tab) {} @Override public void onTabReselected(TabLayout.Tab tab) {} }); } //自定义的Fragment 适配器 class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return data.get(position); } @Override public int getCount() { return data.size(); } //设置标题 @Override public CharSequence getPageTitle(int position) { return titles.get(position); } } //初始化数据 private void initView() { mTb = (TabLayout) findViewById(R.id.tab_layout_id); mVp = (ViewPager) findViewById(R.id.view_page_id); } }
import android.app.ProgressDialog; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.image.ImageOptions; import org.xutils.x; import java.util.List; public class MyFragment extends Fragment { private ListView mLv; private List<NewsInfo.ParamzBean.FeedsBean> data; private MyListAdapter adapter; private String path; private ProgressDialog pd; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_my, container, false); mLv = (ListView) view.findViewById(R.id.lv_id); //1, 初始化进度条对话框 pd = new ProgressDialog(getContext()); //2, 设置 图标, 标题, 内容 pd.setIcon(R.mipmap.ic_launcher); pd.setTitle("提示"); pd.setMessage("正在加载,请稍后....."); pd.setCancelable(false);//是否可撤销 //3, 显示进度条对话框 pd.show(); //获取传入的参数tabId -- 指示当前应该显示的页面 int tabId = getArguments().getInt("tabId"); //确认加载的地址 switch (tabId) { case 0: path = "http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41"; break; case 1: path = "http://litchiapi.jstv.com/api/GetFeeds?column=7&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41"; break; case 2: path = "http://litchiapi.jstv.com/api/GetFeeds?column=6&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC4"; break; } //向网络获取数据 RequestParams params = new RequestParams(path); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String s) { //证明数据获取成功了, 可以解析数据 //gson 解析数据 NewsInfo newsInfo = new Gson().fromJson(s,NewsInfo.class); data = newsInfo.getParamz().getFeeds(); //设置适配器 adapter = new MyListAdapter(data); mLv.setAdapter(adapter); // 4, 向网络加载数据, 如果数据加载成功了, 进度条对话框消失 pd.dismiss(); } @Override public void onError(Throwable throwable, boolean b) { } @Override public void onCancelled(CancelledException e) {} @Override public void onFinished() {} }); //为ListView 添加点击事件监听器, 显示当前选中的内容 mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setIcon(R.mipmap.ic_launcher); builder.setTitle("提示"); builder.setMessage(data.get(position).getData().getSubject()); builder.show(); } }); return view; } //自定义的ListView 的适配器 class MyListAdapter extends BaseAdapter { private List<NewsInfo.ParamzBean.FeedsBean> data; public 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,parent,false); viewHolder = new ViewHolder(); viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv); viewHolder.tv = (TextView) convertView.findViewById(R.id.tv_id); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } //设置内容 viewHolder.tv.setText(data.get(position).getData().getSubject()); ImageOptions options = new ImageOptions.Builder() .setFailureDrawableId(R.mipmap.ic_launcher) .setLoadingDrawableId(R.mipmap.ic_launcher) .setUseMemCache(true) .build(); x.image().bind(viewHolder.iv, "http://litchiapi.jstv.com"+data.get(position).getData().getCover(), options); return convertView; } class ViewHolder { ImageView iv; TextView tv; } } }
newsInfo.java -- gsonFromant创建的实体类