MainActivity布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dl"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></android.support.v4.view.ViewPager>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:text="@string/index_page" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:text="视频" />
<RadioButton
android:id="@+id/radio3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:text="社会" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#fff"
android:orientation="vertical"
>
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@mipmap/ic_launcher" />
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
MainActivity
import android.os.Bundle;
import android.support.v4.app.Fragment;
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.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RadioGroup;
import com.bwie.android.demo1.fragment.IndexFragmnet;
import com.bwie.android.demo1.fragment.MyFragmnet;
import com.bwie.android.demo1.fragment.VideoFragmnet;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ViewPager pager;
private RadioGroup radioGroup;
private List<Fragment> fList;
private DrawerLayout dl;
private List<String> datas;
private ListView lv;
private IndexFragmnet indexFragmnet;
private VideoFragmnet videoFragmnet;
private MyFragmnet myFragmnet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = findViewById(R.id.pager);
radioGroup = findViewById(R.id.radioGroup);
dl = findViewById(R.id.dl);
lv = findViewById(R.id.lv);
datas = new ArrayList<>();
for (int i = 0; i < 10; i++) {
datas.add("导航菜单" + i);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas);
lv.setAdapter(adapter);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i) {
case R.id.radio1:
pager.setCurrentItem(0);
break;
case R.id.radio2:
pager.setCurrentItem(1);
break;
case R.id.radio3:
pager.setCurrentItem(2);
break;
}
}
});
indexFragmnet = new IndexFragmnet();
videoFragmnet = new VideoFragmnet();
myFragmnet = new MyFragmnet();
fList = new ArrayList<>();
fList.add(indexFragmnet);
fList.add(videoFragmnet);
fList.add(myFragmnet);
pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return fList.get(position);
}
@Override
public int getCount() {
return fList.size();
}
});
}
}
IndexFragment 布局文件
<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
>
<android.support.design.widget.TabLayout
android:id="@+id/tl"
app:tabGravity="center"
app:tabIndicatorColor="@color/colorAccent"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/colorPrimaryDark"
app:tabTextColor="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></android.support.v4.view.ViewPager>
</LinearLayout>
首页代码
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bwie.android.demo1.R;
import com.bwie.android.demo1.adapter.MyAdapter;
public class IndexFragmnet extends Fragment {
private View view;
private TabLayout tl;
private ViewPager vp;
private String[] titles;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.index_frag, container, false);
initView();
initData();
return view;
}
private void initView() {
tl = view.findViewById(R.id.tl);
vp = view.findViewById(R.id.vp);
}
private void initData() {
titles = new String[]{
"首页", "视频", "腾讯", "头条", "我的","首页", "视频", "腾讯", "头条", "我的"
};
vp.setOffscreenPageLimit(titles.length);
vp.setAdapter(new MyAdapter(getChildFragmentManager(), titles));
tl.setupWithViewPager(vp);
}
}
首页适配器
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.bwie.android.demo1.fragment.MainFragmnet;
public class MyAdapter extends FragmentPagerAdapter {
private String[] titles;
public MyAdapter(FragmentManager fm, String[] titles) {
super(fm);
this.titles = titles;
}
/**
* Return the Fragment associated with a specified position.
*
* @param position
*/
@Override
public Fragment getItem(int position) {
MainFragmnet mainFragmnet = new MainFragmnet();
Bundle bundle = new Bundle();
//把当前位置的标题传递过去
bundle.putString("name", titles[position]);
mainFragmnet.setArguments(bundle);
return mainFragmnet;
}
/**
* Return the number of views available.
*/
@Override
public int getCount() {
return titles.length;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
解析数据
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bwie.android.demo1.ListAdapter;
import com.bwie.android.demo1.R;
import com.bwie.android.demo1.adapter.MyAdapter;
import com.bwie.android.demo1.bean.NewsBean;
import com.bwie.android.demo1.utils.MyAsyncTask;
import com.google.gson.Gson;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import me.maxwin.view.XListView;
public class MainFragmnet extends Fragment {
private int num = 10;
private View view;
private XListView xlv;
private ListAdapter listAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.main_frag, container, false);
initView();
initData();
return view;
}
private void initData() {
String urlPath = "http://api.tianapi.com/world/?key=8322c06e5b327bbd19a026a643835f7e&num=" + num;
MyAsyncTask task = new MyAsyncTask(new MyAsyncTask.IcallBack() {
@Override
public void getDada(String jsonStr) {
Gson gson = new Gson();
NewsBean newsBean = gson.fromJson(jsonStr, NewsBean.class);
List<NewsBean.NewslistBean> newslist = newsBean.getNewslist();
listAdapter = new ListAdapter(newslist, getActivity());
xlv.setAdapter(listAdapter);
}
});
task.execute(urlPath);
}
private void initView() {
xlv = view.findViewById(R.id.xlv);
//设置
xlv.setPullRefreshEnable(true);
xlv.setPullLoadEnable(true);
xlv.setRefreshTime(getTime());
//监听
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
num = 10;
initData();
listAdapter.notifyDataSetChanged();
xlv.stopRefresh();
}
@Override
public void onLoadMore() {
num += 10;
initData();
listAdapter.notifyDataSetChanged();
xlv.stopLoadMore();
}
});
}
//获取时间
private String getTime() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
return format.format(date);
}
}
XlistView的适配器
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bwie.android.demo1.bean.NewsBean;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import java.util.List;
public class ListAdapter extends BaseAdapter {
private List<NewsBean.NewslistBean> list;
private Context context;
private final DisplayImageOptions options;
public static final int TYPE_LEFT = 0;
public static final int TYPE_RIGHT = 1;
public ListAdapter(List<NewsBean.NewslistBean> list, Context context) {
this.list = list;
this.context = context;
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new RoundedBitmapDisplayer(30))
.build();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getItemViewType(int position) {
if (position%2==0){
return TYPE_LEFT;
}else {
return TYPE_RIGHT;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int type = getItemViewType(i);
if (type==TYPE_LEFT){
ViewHolder holder = null;
if (view == null){
view = View.inflate(context,R.layout.left_layout,null);
holder = new ViewHolder();
holder.imageView1 = view.findViewById(R.id.img);
holder.textView1 = view.findViewById(R.id.tv1);
view.setTag(holder);
}else {
holder = (ViewHolder) view.getTag();
}
ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(),holder.imageView1,options);
holder.textView1.setText(list.get(i).getDescription());
}else {
ViewHolder holder = null;
if (view == null){
view = View.inflate(context,R.layout.right_layout,null);
holder = new ViewHolder();
holder.imageView2 = view.findViewById(R.id.img2);
holder.textView2 = view.findViewById(R.id.tv2);
view.setTag(holder);
}else {
holder = (ViewHolder) view.getTag();
}
ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(),holder.imageView2,options);
holder.textView2.setText(list.get(i).getTitle());
}
return view;
}
class ViewHolder{
public TextView textView1,textView2;
public ImageView imageView1,imageView2;
}
}
异步请求网络工具类
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MyAsyncTask extends AsyncTask<String,Void,String> {
public interface IcallBack{
void getDada(String jsonStr);
}
private IcallBack icallBack;
public MyAsyncTask(IcallBack icallBack) {
this.icallBack = icallBack;
}
@Override
protected String doInBackground(String... strings) {
String dataSta = "";
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5*1000);
connection.setReadTimeout(5*1000);
int code = connection.getResponseCode();
if (code == HttpURLConnection.HTTP_OK){
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
while ((dataSta = reader.readLine())!=null){
buffer.append(dataSta);
}
reader.close();
return buffer.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
icallBack.getDada(s);
}
}
ImageLoader 配置
import android.app.Application;
import android.os.Environment;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.File;
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
File cachefile = new File(Environment.getExternalStorageDirectory().getPath() + "/idm");
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCache(new LruMemoryCache(5*1024*1024))
.memoryCacheSize(5*1024*1024)
.memoryCacheExtraOptions(480,800)
.diskCache(new UnlimitedDiskCache(cachefile))
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(30*1024*1024)
.writeDebugLogs()
.build();
ImageLoader.getInstance().init(configuration);
}
}