public class BaseApplication extends Application {
private DiskCache diskCache;
private File file;
@Override
public void onCreate() {
super.onCreate();
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File rootSD = Environment.getExternalStorageDirectory();
file = new File(rootSD, "pic");
if (!file.exists()) {
file.mkdirs();
}
}
try {
diskCache = new LruDiskCache(file, new Md5FileNameGenerator(), 50 * 1024 * 1024);
} catch (IOException e) {
e.printStackTrace();
}
BitmapDisplayer displayer = new RoundedBitmapDisplayer(10);
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheInMemory(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(displayer)
.showImageOnFail(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.build();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.diskCache(diskCache)
.memoryCache(new LruMemoryCache(12 * 1024 * 1024))
.threadPoolSize(3)
.defaultDisplayImageOptions(options)
.build();
ImageLoader.getInstance().init(configuration);
}
}
public class HomeFragment extends Fragment {
private String url = "http://www.xieast.com/api/news/news.php?page=";
private int currentPage = 1;
private XListView xlvNews;
private NewsAdapter newsAdapter;
private List<News.DataBean> list;
private Handler handler = new Handler();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, null, false);
initView(view);
return view;
}
@SuppressLint("StaticFieldLeak")
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
list = new ArrayList<>();
newsAdapter = new NewsAdapter(getActivity(), list);
xlvNews.setAdapter(newsAdapter);
xlvNews.setPullLoadEnable(true);
xlvNews.setPullRefreshEnable(true);
getData(1, false);
xlvNews.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
currentPage = 1;
getData(currentPage, false);
}
@Override
public void onLoadMore() {
currentPage++;
getData(currentPage, true);
}
});
}
@SuppressLint("StaticFieldLeak")
private void getData(int page, final boolean isLoadMore) {
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return HttpUtils.getStringFromHttp(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (!TextUtils.isEmpty(s)) {
Gson gson = new Gson();
News news = gson.fromJson(s, News.class);
if (news != null) {
List<News.DataBean> data = news.getData();
if (data != null) {
if (!isLoadMore) {
list.clear();
}
list.addAll(data);
newsAdapter.notifyDataSetChanged();
}
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isLoadMore) {
xlvNews.stopLoadMore();
} else {
xlvNews.stopRefresh();
xlvNews.setRefreshTime("刚刚");
}
}
}, 2000);
}
}
}.execute(url + currentPage);
}
private void initView(View view) {
xlvNews = view.findViewById(R.id.xlv_news);
}
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ViewPager vpHome;
private TextView txtHome;
private TextView txtWeather;
private TextView txtMine;
private HomeFragment homeFragment;
private WeatherFragment weatherFragment;
private MineFragment mineFragment;
private List<Fragment> list;
private int currentPage = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
setListener();
}
private void setListener() {
txtHome.setOnClickListener(this);
txtWeather.setOnClickListener(this);
txtMine.setOnClickListener(this);
}
private void initData() {
homeFragment = new HomeFragment();
weatherFragment = new WeatherFragment();
mineFragment = new MineFragment();
list = new ArrayList<>();
list.add(homeFragment);
list.add(weatherFragment);
list.add(mineFragment);
vpHome.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
});
changePager(currentPage);
vpHome.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
changePager(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void initView() {
vpHome = findViewById(R.id.vp_home);
txtHome = findViewById(R.id.txt_home);
txtWeather = findViewById(R.id.txt_weather);
txtMine = findViewById(R.id.txt_mine);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.txt_home:
currentPage = 0;
break;
case R.id.txt_weather:
currentPage = 1;
break;
case R.id.txt_mine:
currentPage = 2;
break;
}
changePager(currentPage);
}
private void changePager(int currentPage) {
vpHome.setCurrentItem(currentPage);
txtHome.setBackgroundColor(currentPage == 0 ? Color.GRAY : Color.WHITE);
txtWeather.setBackgroundColor(currentPage == 1 ? Color.GRAY : Color.WHITE);
txtMine.setBackgroundColor(currentPage == 2 ? Color.GRAY : Color.WHITE);
}
}