XListview靈活應用
主頁面-----Activiety:
尋找控件,
設置XlistView上下拉及刷新時間,
設置圖片緩存路徑,
進入AsyncTask異步網絡請求數據
import android.content.Context;
import android.os.Environment;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import view.XListView;
public class MainActivity extends AppCompatActivity {//主頁面
XListView lv;
private String path="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=";
private String path2="&page=";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String path = Environment.getExternalStorageDirectory().getPath();
// initImageLoader(this,new File(path+"/AssN"));
init();//調用方法
}
public static void initImageLoader(Context c,File file) {
// This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this);
// method.
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(c);
config.threadPriority(Thread.NORM_PRIORITY - 2);
config.denyCacheImageMultipleSizesInMemory();
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
config .diskCache(new UnlimitedDiscCache(file));//UnlimitedDiskCache 限制這個圖片的緩存路徑
config .diskCacheFileCount(50);//配置sdcard緩存文件的數量
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
}
private void init() {
lv = (XListView)findViewById(R.id.lv);
lv.setPullLoadEnable(true);
lv.setPullRefreshEnable(true);
long l = System.currentTimeMillis();
SimpleDateFormat formatter= new SimpleDateFormat(" yyyy年MM月dd日 HH時mm分ss秒");//設置時間
String format = formatter.format(l);
lv.setRefreshTime(format);
MyTask myTask = new MyTask(lv, path, this, "GET",path2);//進入一部
myTask.execute();
}
}
AsyncTask頁面:
網絡請求數據,
設置xlistview的adapter,
設置xlistview上拉下滑刷新
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ListView;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.logging.LogRecord;
import view.XListView;
public class MyTask extends AsyncTask<String,String,String> {//異步類
private XListView lv;
private String path;
private Context context;
private String gb;
private List<Dates> data;
private MyAdapter myAdapter;
private String path2;
private static int PAGE=1;
private static int COUTN=10;
private Handler han=new Handler() {
@Override
public void handleMessage(Message msg) {
if((boolean)msg.obj){
if(msg.arg1==1){
long l = System.currentTimeMillis();
SimpleDateFormat formatter= new SimpleDateFormat(" yyyy年MM月dd日 HH時mm分ss秒");//設置時間
String format = formatter.format(l);
lv.setRefreshTime(format);
Log.d("zzz",data.toString());
myAdapter.setData(data);
myAdapter.notifyDataSetChanged();
lv.stopRefresh();
}else if(msg.arg1==2){
Log.d("zzz",path+COUTN+path2+PAGE);
myAdapter.setData(data);
myAdapter.notifyDataSetInvalidated();
lv.stopLoadMore();
}
}
super.handleMessage(msg);
}
};
public MyTask(XListView lv, String path, Context context,String gb,String path2){
this.lv=lv;
this.path=path;
this.context=context;
this.gb=gb;
this.path2=path2;
}
@Override
protected String doInBackground(String... params) {
getdata();//獲取數據
return null;
}
@Override
protected void onPostExecute(String s) {
lv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
COUTN=10;
PAGE=1;
new Thread(){
@Override
public void run() {
boolean b = getdata();
Message message = new Message();
message.obj=b;
message.arg1=1;
han.sendMessage(message);
super.run();
}
}.start();
}
@Override
public void onLoadMore() {
COUTN+=10;
new Thread(){
@Override
public void run() {
boolean b = getdata();
Message message = new Message();
message.obj=b;
message.arg1=2;
han.sendMessage(message);
super.run();
}
}.start();
}
});
myAdapter = new MyAdapter(context, data);
lv.setAdapter(myAdapter);//設置適配器
super.onPostExecute(s);
}
public boolean getdata() {
try {
URL url = new URL(path+COUTN+path2+PAGE);
HttpURLConnection cton = (HttpURLConnection) url.openConnection();
cton.setRequestMethod(gb);
cton.setReadTimeout(10000);
cton.setConnectTimeout(10000);
if(cton.getResponseCode()==200){
InputStream inputStream = cton.getInputStream();
String json = getjson(inputStream, "utf-8");
Log.d("zzz","rencai");
Gson gson = new Gson();
Seec seec = gson.fromJson(json, Seec.class);
data = seec.getData();
return true;
}
} catch (Exception e) {
e.printStackTrace();
Log.d("zzz",e.toString());
}
return false;
}
private String getjson(InputStream inputStream, String s) {
String a="";
String s1;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, s));
while ((s1=reader.readLine())!=null){
a=a+s1;
}
} catch (Exception e) {
e.printStackTrace();
}
return a;
}
}
BaseAdapter:
多條目展示:
import android.support.v7.app.ActionBar;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.util.List;
/**
* Created by Ning.A.C on 2017/9/11.
*/
public class MyAdapter extends BaseAdapter{//適配器
private Context context;
private List<Dates> data;
public List<Dates> getData() {
return data;
}
public void setData(List<Dates> data) {
this.data = data;
}
public MyAdapter(Context context, List<Dates> data){//構造
this.context=context;
this.data=data;
}
@Override
public int getCount() {
return data.size();//寫入長度
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if(position%2==0){
return 0;
}else if (position%2==1){
return 1;
}
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {//返回視圖
Con1 con1=null;
Con2 con2=null;
if(convertView==null){
switch (getItemViewType(position)){
case 0:
convertView = View.inflate(context, R.layout.item1, null);
con1=new Con1();
con1.tit1 = (TextView) convertView.findViewById(R.id.tit1);
con1.time1 = (TextView) convertView.findViewById(R.id.time1);
con1.img1=(ImageView)convertView.findViewById(R.id.img1);
convertView.setTag(con1);
break;
case 1:
convertView = View.inflate(context, R.layout.layout, null);
con2=new Con2();
con2.tit2 = (TextView) convertView.findViewById(R.id.tit2);
con2.time2 = (TextView) convertView.findViewById(R.id.time2);
convertView.setTag(con2);
break;
}
}
switch (getItemViewType(position)){
case 0:
con1= (Con1) convertView.getTag();
con1.time1.setText(data.get(position).getTopTime());
con1.tit1.setText(data.get(position).getTitle());
DisplayImageOptions build = new DisplayImageOptions.Builder().showImageOnFail(R.mipmap.ic_launcher).showImageOnLoading(R.mipmap.ic_launcher).cacheOnDisk(true).cacheInMemory(true).build();
ImageLoaderConfiguration build1 = new ImageLoaderConfiguration.Builder(context).defaultDisplayImageOptions(build).build();
ImageLoader.getInstance().init(build1);
ImageLoader.getInstance().displayImage(data.get(position).getImg(),con1.img1);
break;
case 1:
con2= (Con2) convertView.getTag();
con2.time2.setText(data.get(position).getTopTime());
con2.tit2.setText(data.get(position).getTitle());
break;
}
return convertView;
}
class Con1{
TextView tit1,time1;
ImageView img1;
}
class Con2{
TextView tit2,time2;
}
}
Layout佈局,主頁面:
//XListView頭尾視圖需個人配置
xlistview_header:頭配置
<RelativeLayout
android:id="@+id/xlistview_header_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@mipmap/ic_launcher"
android:id="@+id/xlistview_header_arrow"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginLeft="50dp" />
<ProgressBar
android:id="@+id/xlistview_header_progressbar"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginLeft="50dp" />
<TextView
android:id="@+id/xlistview_header_hint_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/xlistview_header_arrow" />
<TextView
android:id="@+id/te"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/xlistview_header_arrow"
android:layout_centerHorizontal="true"
android:text="上次刷新時間:"
android:layout_marginTop="10dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/te"
android:layout_below="@+id/xlistview_header_arrow"
android:layout_marginTop="10dp"
android:id="@+id/xlistview_header_time"
/>
</RelativeLayout>
xlistview_footer:腳佈局:
<RelativeLayout
android:id="@+id/xlistview_footer_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:id="@+id/xlistview_footer_progressbar"
/>
<TextView
android:id="@+id/xlistview_footer_hint_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>