需要导入的依赖:
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.google.guava:guava:16.0.1'
需要导入的包文件
implementation project(':pullToRefresh')
implementation project(':imageloaderlibrary')
此项目需要 两个adapter,一个app,一个bean,一个net,两个fragment
net:
package com.example.administrator.three.net;
import android.os.AsyncTask;
import com.google.common.io.CharStreams;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class NetUtils {
private static final NetUtils ourInstance = new NetUtils();
public static NetUtils getInstance() {
return ourInstance;
}
private NetUtils() {
}
private Callback callback;
public void setCallback(Callback callback) {
this.callback = callback;
}
public void getData(String url, Callback callback){
new FuLiUtils(callback).execute(url);
}
public void GetData(String url){
new FuLiUtils().execute(url);
}
public interface Callback{
void Call(String result);
}
public class FuLiUtils extends AsyncTask<String,Void,String>{
private Callback callback;
public FuLiUtils(Callback callback) {
this.callback = callback;
}
public FuLiUtils() {
}
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK){
return CharStreams.toString(new InputStreamReader(connection.getInputStream(),"UTF-8"));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
if(callback != null){
callback.Call(s);
}
}
}
}
app:
package com.example.administrator.three.app;
import android.app.Application;
import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = ImageLoaderUtils.getConfiguration(this);
ImageLoader.getInstance().init(configuration);
}
}
1,首页布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/drawer"
xmlns:android="http://schemas.android.com/apk/res/android" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@drawable/ic_launcher_background"
android:orientation="horizontal">
<ImageView
android:id="@+id/ima_view"
android:layout_width="70dp"
android:layout_height="70dp"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
<FrameLayout
android:id="@+id/frag_ment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8">
</FrameLayout>
<RadioGroup
android:id="@+id/radio_group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:text="刷新"
android:textSize="20sp"
android:gravity="center"/>
<RadioButton
android:id="@+id/rb2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:text="我的"
android:textSize="20sp"
android:gravity="center"/>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_gravity="start"
android:layout_width="240dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ccc">
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
2,初始化控件以及操作
package com.example.administrator.three;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RadioGroup;
import com.example.administrator.three.Fragment.OneFragment;
import com.example.administrator.three.Fragment.TwoFragment;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
public class MainActivity extends AppCompatActivity {
private ImageView ima_view;
private FrameLayout frag_ment;
private RadioGroup radio_group;
private DrawerLayout drawer;
private OneFragment oneFragment;
private TwoFragment twoFragment;
private FragmentManager manager;
private PullToRefreshListView pull_to;
private String url = "http://www.xieast.com/api/news/news.php?page=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ima_view = findViewById(R.id.ima_view);
frag_ment = findViewById(R.id.frag_ment);
radio_group = findViewById(R.id.radio_group);
drawer = findViewById(R.id.drawer);
image();
drawer();
radio();
}
private void radio() {
manager = getSupportFragmentManager();
oneFragment = new OneFragment();
twoFragment = new TwoFragment();
manager.beginTransaction().replace(R.id.frag_ment,oneFragment).commit();
radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
FragmentTransaction transaction = manager.beginTransaction();
switch (i){
case R.id.rb1:
transaction.replace(R.id.frag_ment,oneFragment);
break;
case R.id.rb2:
transaction.replace(R.id.frag_ment,twoFragment);
break;
}
transaction.commit();
}
});
}
private void image() {
ima_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (drawer.isDrawerOpen(Gravity.START)){
drawer.closeDrawer(Gravity.START);
}else {
drawer.openDrawer(Gravity.START);
}
}
});
}
private void drawer() {
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
View childAt = drawer.getChildAt(0);
View ms = drawer;
float mm = 1 - slideOffset;
childAt.setTranslationX(ms.getMeasuredWidth()*(1 - mm));
}
@Override
public void onDrawerOpened(@NonNull View drawerView) {
}
@Override
public void onDrawerClosed(@NonNull View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
}
}
3,第一个页面的布局:
<?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"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
4,第一个页面的操作部分:
package com.example.administrator.three.Fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import com.example.administrator.three.Bean.bean;
import com.example.administrator.three.R;
import com.example.administrator.three.adapter.LAdapter;
import com.example.administrator.three.adapter.LunAdapter;
import com.example.administrator.three.net.NetUtils;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
public class OneFragment extends Fragment implements NetUtils.Callback {
private LunAdapter lunAdapter;
private List<bean.DataBean> data;
private bean bean;
private List<ImageView> list = new ArrayList<>();
private ViewPager vp;
private PullToRefreshListView list_view;
private String url = "http://www.xieast.com/api/news/news.php?page=";
private int page = 1;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0){
int currentItem = vp.getCurrentItem();
currentItem++;
vp.setCurrentItem(currentItem);
handler.sendEmptyMessageDelayed(0,2000);
}
}
};
private NetUtils instance;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.one_layout, container, false);
vp = view.findViewById(R.id.vp);
list_view = view.findViewById(R.id.list_view);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
instance = NetUtils.getInstance();
instance.getData(url,this);
list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page = 1;
instance.getData(url + page, OneFragment.this);
vp.postDelayed(new Runnable() {
@Override
public void run() {
list_view.onRefreshComplete();
}
},1000);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page ++;
instance.getData(url + page, OneFragment.this);
vp.postDelayed(new Runnable() {
@Override
public void run() {
list_view.onRefreshComplete();
}
},1000);
}
});
}
@Override
public void Call(String result) {
Gson gson = new Gson();
bean = gson.fromJson(result, bean.class);
data = bean.getData();
LAdapter lAdapter = new LAdapter(data, getActivity());
list_view.setAdapter(lAdapter);
for (int i = 0 ; i < bean.getData().size() ; i ++ ){
ImageView imageView = new ImageView(getActivity());
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),imageView);
list.add(imageView);
}
lunAdapter = new LunAdapter(list, getActivity());
vp.setAdapter(lunAdapter);
handler.sendEmptyMessageDelayed(0,2000);
}
}
注意第二个fragment没有数据,写不写都可以。
5,需要用到的Adapter
05-1:PullToRefreshListView展示数据时用到的Adapter:
<
package com.example.administrator.three.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.administrator.three.Bean.bean;
import com.example.administrator.three.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
public class LAdapter extends BaseAdapter {
private List<bean.DataBean> data;
private Context context;
public LAdapter(List<bean.DataBean> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertview, ViewGroup viewGroup) {
ViewHolder holder = null;
if (convertview == null){
convertview = View.inflate(context, R.layout.buju_layout,null);
holder = new ViewHolder();
holder.text = convertview.findViewById(R.id.text_bu_view);
holder.image1 = convertview.findViewById(R.id.ima1);
holder.image2 = convertview.findViewById(R.id.ima2);
holder.image3 = convertview.findViewById(R.id.ima3);
convertview.setTag(holder);
}else{
holder = (ViewHolder) convertview.getTag();
}
holder.text.setText(data.get(i).getTitle());
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),holder.image1);
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s02(),holder.image2);
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s03(),holder.image3);
return convertview;
}
class ViewHolder{
TextView text;
ImageView image1,image2,image3;
}
}
5-1-1:PullToRefreshListView用到的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_bu_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="xxxx"
android:textSize="20sp"
android:gravity="center"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ima1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background"/>
<ImageView
android:id="@+id/ima2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background"/>
<ImageView
android:id="@+id/ima3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background"/>
</LinearLayout>
</LinearLayout>
5-2:ViewPager:轮播图片时用到的Adapter:
package com.example.administrator.three.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.List;
public class LunAdapter extends PagerAdapter {
private List<ImageView> list;
private Context context;
public LunAdapter(List<ImageView> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = list.get(position % list.size());
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
}