//当前Fragment
public class SheHuiFragment extends Fragment implements XListView.IXListViewListener {
// ?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10
private static final String TAG = "SheHuiFragment----";
private XListView shehui_listview;
private int page = 10;
private static List<SheHuiBean.NewslistBean> newslist = new ArrayList<>();
private MyAdapter myAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fg_shehui_layout, null);
shehui_listview = view.findViewById(R.id.shehui_listview);
shehui_listview.setPullLoadEnable(true);
shehui_listview.setPullRefreshEnable(true);
//设置监听
shehui_listview.setXListViewListener(this);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
myAdapter = new MyAdapter(getActivity(), newslist);
shehui_listview.setAdapter(myAdapter);
//请求网络
getDataFromNet();
}
private void getDataFromNet() {
HttpUtils instance = HttpUtils.getInstance();
instance.get(HttpConfig.SHEHUI_URL + "?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=" + page);
Log.d(TAG, "请求也---: " + page);
instance.setHttpUtilsListener(new HttpUtils.HttpUtilListener() {
@Override
public void getSuccess(String json) {
Log.d(TAG, "getSuccess: " + json);
Gson gson = new Gson();
SheHuiBean sheHuiBean = gson.fromJson(json, SheHuiBean.class);
//设置适配器
List<SheHuiBean.NewslistBean> newslist1 = sheHuiBean.getNewslist();
//判断是初次加载,还是刷新,还是上啦加载更多
//这里的参数不是page 而是数据的数量,所以每次得清一下。
// if (page == 10) {
newslist.clear();
shehui_listview.stopRefresh();
// }
newslist.addAll(newslist1);
//刷新数据
myAdapter.notifyDataSetChanged();
shehui_listview.stopLoadMore();
}
@Override
public void getError(String error) {
Log.d(TAG, "getError: " + error);
}
});
}
//刷新
@Override
public void onRefresh() {
page = 10;
getDataFromNet();
}
//加载更多
@Override
public void onLoadMore() {
page += 10;
getDataFromNet();
}
}
//MyApp类
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
initImageLoader();
}
private void initImageLoader() {
//创建默认的ImageLoader配置参数
ImageLoaderConfiguration configuration = ImageLoaderConfiguration
.createDefault(this);
//Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(configuration);
}
public static DisplayImageOptions getOptions() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true) // default
.cacheOnDisk(true) // default
.bitmapConfig(Bitmap.Config.RGB_565) // default
.displayer(new SimpleBitmapDisplayer()) // default
.handler(new Handler()) // default
.build();
return options;
}
}
//HttpUtils工具类
public class HttpUtils {
private static final String TAG = "HttpUtils---";
private MyHandler myHandler = new MyHandler();
private static final int SUCCESS = 0;
private static final int ERROR = 1;
//单利
private static HttpUtils httpUtils = new HttpUtils();
private HttpUtilListener httpUtilsListener;
private HttpUtils() {
}//构造方法私有化
public static HttpUtils getInstance() {
if (httpUtils == null) {
httpUtils = new HttpUtils();
}
return httpUtils;
}
//封装get
public void get(final String url) {
new Thread() {
@Override
public void run() {
try {
URL u = new URL(url);
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setConnectTimeout(3000);
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
String json = inputStream2String2(inputStream);
//发送数据
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = json;
myHandler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
}
}.start();
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
//成功
String json = (String) msg.obj;
Log.d(TAG, "handleMessage: " + json);
httpUtilsListener.getSuccess(json);
break;
case ERROR:
//失败
String error = (String) msg.obj;
Log.d(TAG, "handleMessage: " + error);
httpUtilsListener.getError(error);
break;
}
}
}
//1.定义接口
public interface HttpUtilListener {
void getSuccess(String json);
void getError(String error);
}
//2.外部访问的方法
public void setHttpUtilsListener(HttpUtilListener httpUtilsListener) {
this.httpUtilsListener = httpUtilsListener;
}
//将流--字符串
public String inputStream2String(InputStream inputStream) {
int len = 0;
byte[] butter = new byte[1024];
StringBuffer stringBuffer = new StringBuffer();
try {
while ((len = inputStream.read(butter)) != -1) {
String s = new String(butter, 0, len);
stringBuffer.append(s);
}
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer.toString();
}
//将流--字符串 使用字符流--部分乱码
public String inputStream2String2(InputStream inputStream) {
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(reader);
StringBuffer sr = new StringBuffer();
try {
String s = null;
while ((s = br.readLine()) != null) {
sr.append(s);
}
} catch (Exception e) {
e.printStackTrace();
}
return sr.toString();
}
}
//适配器
public class MyAdapter extends BaseAdapter {
private static final String TAG = "MyAdapter---";
private Context context;
private List<SheHuiBean.NewslistBean> newslist;
public MyAdapter(Context context, List<SheHuiBean.NewslistBean> newslist) {
this.context = context;
this.newslist = newslist;
}
@Override
public int getCount() {
return newslist.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
switch (type) {
case 0:
LeftViewHoder leftViewHoder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_left, null);
ImageView imageView = convertView.findViewById(R.id.left_pic);
TextView textView = convertView.findViewById(R.id.left_title);
leftViewHoder = new LeftViewHoder(imageView, textView);
convertView.setTag(leftViewHoder);
} else {
leftViewHoder = (LeftViewHoder) convertView.getTag();
}
//赋值
Log.d(TAG, "偶数--: "+newslist+"赋值");
String picUrl = newslist.get(position).getPicUrl();
ImageLoader.getInstance().displayImage(picUrl, leftViewHoder.getImageView(), MyApp.getOptions());
leftViewHoder.getTextView().setText(newslist.get(position).getTitle());
Log.d(TAG, "偶数: "+newslist.get(position).getTitle());
break;
case 1:
RightViewHoder rightViewHoder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_right, null);
ImageView imageView = convertView.findViewById(R.id.right_pic);
TextView textView = convertView.findViewById(R.id.right_title);
rightViewHoder = new RightViewHoder(imageView, textView);
convertView.setTag(rightViewHoder);
} else {
rightViewHoder = (RightViewHoder) convertView.getTag();
}
//赋值
String picUrl2 = newslist.get(position).getPicUrl();
ImageLoader.getInstance().displayImage(picUrl2, rightViewHoder.getImageView(), MyApp.getOptions());
rightViewHoder.getTextView().setText(newslist.get(position).getTitle());
Log.d(TAG, "基数---: "+newslist.get(position).getTitle());
break;
}
return convertView;
}
@Override
public int getItemViewType(int position) {
//如果是基数
int type = position % 2;
return type;
}
@Override
public int getViewTypeCount() {
return 2;
}
/*******************************viewhoder***********************/
class LeftViewHoder {
private ImageView imageView;
private TextView textView;
public LeftViewHoder(ImageView imageView, TextView textView) {
this.imageView = imageView;
this.textView = textView;
}
public ImageView getImageView() {
return imageView;
}
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
class RightViewHoder {
private ImageView imageView;
private TextView textView;
public RightViewHoder(ImageView imageView, TextView textView) {
this.imageView = imageView;
this.textView = textView;
}
public ImageView getImageView() {
return imageView;
}
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
}