布局
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/lv"
android:layout_width=“0dp”
android:layout_height=“0dp”
app:layout_constraintLeft_toLeftOf=“parent”
app:layout_constraintRight_toRightOf=“parent”
app:layout_constraintTop_toTopOf=“parent”
app:layout_constraintBottom_toBottomOf=“parent”
></com.handmark.pulltorefresh.library.PullToRefreshListView>
BaseActivity
package com.example.week2.ui.activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResId());
initView();
initData();
}
protected abstract int getLayoutResId();
protected abstract void initData();
protected abstract void initView();
}
MainActvity
package com.example.week2.ui.activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import com.example.week2.R;
import com.example.week2.ui.fragment.FragmentOne;
import com.example.week2.ui.fragment.FragmentTwo;
public class MainActivity extends BaseActivity {
private ViewPager viewpager;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
viewpager.setCurrentItem(0);
return true;
case R.id.navigation_dashboard:
viewpager.setCurrentItem(1);
return true;
case R.id.navigation_notifications:
viewpager.setCurrentItem(2);
return true;
}
return false;
}
};
@Override
protected int getLayoutResId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
}
@Override
protected void initView() {
viewpager =findViewById(R.id.viewpager);
viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
case 2:
return new FragmentTwo();
}
return null;
}
@Override
public int getCount() {
return 3;
}
});
final BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
switch (i){
case 0:
navigation.setSelectedItemId(R.id.navigation_home);
break;
case 1:
navigation.setSelectedItemId(R.id.navigation_dashboard);
break;
case 2:
navigation.setSelectedItemId(R.id.navigation_notifications);
break;
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
}
BaseFragment
package com.example.week2.ui.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(getLayoutResId(),container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
}
protected abstract void initView(View view);
protected abstract void initData();
protected abstract int getLayoutResId();
}
上拉加载下拉刷新的页面
package com.example.week2.ui.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.example.week2.ui.adapter.MAdapter;
import com.example.week2.R;
import com.example.week2.ui.model.NeUtil;
import com.example.week2.ui.model.UserBean;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.List;
public class Fragement extends BaseFragment {
private PullToRefreshListView lv;
private MAdapter mAdapter;
private int page;
private final int count=10;
private String apiUrl;
@Override
protected void initView(View view) {
lv =view.findViewById(R.id.lv);
//转化成listview
final ListView listView = lv.getRefreshableView();
mAdapter = new MAdapter(getActivity());
listView.setAdapter(mAdapter);
//开始刷新
lv.setMode(PullToRefreshBase.Mode.BOTH);
lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page=1;
initData();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
initData();
}
});
page=1;
initData();
}
protected void initData() {
apiUrl = getArguments().getString("apiUrl");
NeUtil.getRequest3(apiUrl + "page=" + page + "&count=" + count, UserBean.class, new NeUtil.NetCallBack() {
@Override
public void onsuccess(Object o) {
UserBean data1= (UserBean) o;
List<UserBean.ResultBean> result = data1.getResult();
if(result==null){
lv.onRefreshComplete();
return;
}
if (page==1){
mAdapter.setList(result);
}else{
mAdapter.setadd(result);
}
lv.onRefreshComplete();
page++;
}
});
}
@Override
protected int getLayoutResId() {
return R.layout.fragment;
}
}
Tablayout
package com.example.week2.ui.fragment;
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.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.week2.R;
public class FragmentOne extends BaseFragment {
private ViewPager viewpager;
private TabLayout tab;
private String[] names=new String[]{
"正在热映","即将上映"
};
private String apiUrl = "";
@Override
protected void initView(View view) {
viewpager =view.findViewById(R.id.viewpager);
tab =view.findViewById(R.id.tab);
viewpager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
apiUrl = "http://172.17.8.100/movieApi/movie/v1/findHotMovieList?";
break;
default:
apiUrl = "http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?";
break;
}
Bundle bundle = new Bundle();
bundle.putString("apiUrl",apiUrl);
Fragment fragment = new Fragement();
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return names.length;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return names[position];
}
});
tab.setupWithViewPager(viewpager);
}
@Override
protected void initData() {
}
@Override
protected int getLayoutResId() {
return R.layout.fragmentone;
}
}
抽基类
package com.example.week2.ui.fragment;
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.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.week2.R;
public class FragmentOne extends BaseFragment {
private ViewPager viewpager;
private TabLayout tab;
private String[] names=new String[]{
"正在热映","即将上映"
};
private String apiUrl = "";
@Override
protected void initView(View view) {
viewpager =view.findViewById(R.id.viewpager);
tab =view.findViewById(R.id.tab);
viewpager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
apiUrl = "http://172.17.8.100/movieApi/movie/v1/findHotMovieList?";
break;
default:
apiUrl = "http://172.17.8.100/movieApi/movie/v1/findReleaseMovieList?";
break;
}
Bundle bundle = new Bundle();
bundle.putString("apiUrl",apiUrl);
Fragment fragment = new Fragement();
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return names.length;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return names[position];
}
});
tab.setupWithViewPager(viewpager);
}
@Override
protected void initData() {
}
@Override
protected int getLayoutResId() {
return R.layout.fragmentone;
}
}
图片缓存
package com.example.week2.ui.model;
import android.app.Application;
import android.os.Environment;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.File;
public class App extends Application {
File file=new File(Environment.getExternalStorageDirectory(), “image”);
@Override
public void onCreate() {
super.onCreate();
ImageLoader.getInstance().init(new ImageLoaderConfiguration
.Builder(this)
.diskCache(new UnlimitedDiskCache(file))
.build());
}
}