XListview和多条目应用
//主页面
//不要忘记权限
//
//意图
implementation project(’:xListView’)
implementation ‘com.google.code.gson:gson:2.8.5’
implementation’com.nostra13.universalimageloader:universal-image-loader:1.9.5’
//-------------------------------------------------------------------------------------------------
public class MainActivity extends AppCompatActivity {
private XListView xListView;
private int page = 1;
private List<Datas>list1 = null;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
xListView.stopRefresh();
break;
case 1:
xListView.stopLoadMore();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
xListView = findViewById(R.id.xlistView);
//下拉刷新
xListView.setPullRefreshEnable(true);
//上拉加载
xListView.setPullLoadEnable(true);
//设置下拉和上拉的监听
xListView.setXListViewListener(new XListView.IXListViewListener() {
//下拉刷新
@Override
public void onRefresh() {
//2秒停止刷新
getRefreshTime();
//重新刷新数据
page=1;
//获取网络数据
getServerData();
handler.sendEmptyMessageAtTime(0,5000);
}
//上拉加载
@Override
public void onLoadMore() {
page++;
getServerData();
handler.sendEmptyMessageAtTime(1,5000);
}
});
//默认获取数据
getServerData();
//获取当前系统时间
getRefreshTime();
}
//获取当前系统时间
@SuppressLint("SimpleDateFormat")
private void getRefreshTime() {
long time = System.currentTimeMillis();
Date date = new Date(time);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = simpleDateFormat.format(date);
xListView.setRefreshTime(s);
}
//默认获取数据
private void getServerData() {
new MyAsync().execute();
}
//重写方法
private class MyAsync extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
String path = "http://www.xieast.com/api/news/news.php?page="+page;
try {
//获取网址
URL url = new URL(path);
//打开链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//请求方式
conn.setRequestMethod("GET");
//连接服务器延时
conn.setConnectTimeout(5000);
//状态码比较
if (conn.getResponseCode() == 200) {
//获取服务器资源
InputStream inputStream = conn.getInputStream();
//创建字节输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
//循环读取
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
//关流
bos.close();
inputStream.close();
//获取数据 传递给 onPostExecute
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//解析数据
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.i("xxx", s);
Gson gson = new Gson();
JsonBean fromJson = gson.fromJson(s, JsonBean.class);
ArrayList<Datas> list = fromJson.getData();
// Toast.makeText(MainActivity.this,list.toString(), Toast.LENGTH_SHORT).show();
//page为1时创建集合
if (page==1){
list1=new ArrayList<>();
}
list1.addAll(list);
MyAdapter myAdapter = new MyAdapter(MainActivity.this, list);
xListView.setAdapter(myAdapter);
xListView.setSelection(myAdapter.getCount()-29);
}
}
}
//-------------------------------------------------------------------------------------
//适配器
public class MyAdapter extends BaseAdapter {
//条目类型从0开始
private final static int TYPE_ONE = 0;
private final static int TYPE_TWO = 1;
private Context context;
private ArrayList<Datas> list;
private final DisplayImageOptions options;
public MyAdapter(Context context, ArrayList<Datas> list) {
this.context = context;
this.list = list;
options= new DisplayImageOptions.Builder()
.displayer(new RoundedBitmapDisplayer(20))
.build();
}
//条目类型数量
@Override
public int getViewTypeCount() {
return 2;
}
//根据数据判断类型
@Override
public int getItemViewType(int position) {
if (position == 3 || position == 5) {
return TYPE_TWO;
} else {
return TYPE_ONE;
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder1 viewHolder1 = null;
ViewHolder2 viewHolder2 = null;
//先获取条目类型
int itemViewType = getItemViewType(position);
if (convertView == null) {
if (itemViewType == TYPE_ONE) {
convertView = View.inflate(context, R.layout.item1, null);
viewHolder1 = new ViewHolder1();
viewHolder1.title1 = convertView.findViewById(R.id.tv_title1);
viewHolder1.head1 = convertView.findViewById(R.id.iv_head1);
convertView.setTag(viewHolder1);
} else {
convertView = View.inflate(context, R.layout.item2, null);
viewHolder2 = new ViewHolder2();
viewHolder2.title2 = convertView.findViewById(R.id.tv_title2);
viewHolder2.head2 = convertView.findViewById(R.id.iv_head2);
viewHolder2.head22 = convertView.findViewById(R.id.iv_head22);
convertView.setTag(viewHolder2);
}
} else {
//根据类型复用
if (itemViewType == TYPE_ONE) {
viewHolder1 = (ViewHolder1) convertView.getTag();
} else {
viewHolder2 = (ViewHolder2) convertView.getTag();
}
//根据类型获取数据展示
if (itemViewType == TYPE_ONE) {
viewHolder1.title1.setText(list.get(position).getTitle());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), viewHolder1.head1,options);
} else {
viewHolder2.title2.setText(list.get(position).getTitle());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), viewHolder2.head2,options);
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(), viewHolder2.head22,options);
}
}
return convertView;
}
class ViewHolder1 {
private TextView title1;
private ImageView head1;
}
class ViewHolder2 {
private TextView title2;
private ImageView head2;
private ImageView head22;
}
}
//-------------------------------------------------------------------------------------
//图片设置
package com.bwie.util;
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
//不要忘记权限
public class ImageLoderUtil extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(build);
}
}
//xlistlibrary使用过程
1.解压
2.解压完之后进行导入
3.找到目录下的xlist的library包
4.改library包里的build.gradle里的
5.改完之进入xlistview清单文件中删除多余的东西就剩以下东西即可
6.删完之后进行引用
7.进行引用
8.引用完之后进行同步操作
引用完之后进行同步操作
(ps:在运行后面
)