MVPXlistView展示上拉下拉效果
本文實(shí)例為大家分享了MVPXlistView上拉下拉展示的具體代碼,供大家參考,具體內(nèi)容如下
抽基類
package com.gs.gg.day8.back;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BackActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
protected abstract int getLayout();
protected abstract void initViews();
protected abstract void setOnClick();
protected abstract void processLogic();
void init(){
if (getLayout()!=0){
setContentView(getLayout());
initViews();
setOnClick();
processLogic();
}else {
throw new IllegalStateException("請加載布局文件");
}
}
}
Model
package com.gs.gg.day8.model;
import com.gs.gg.day8.callbase.MyCallBase;
public interface Model {
void getData(String mUrl,String parants,MyCallBase callBase);
}
MyCallBase
package com.gs.gg.day8.callbase;
import com.gs.gg.day8.bean.User;
public interface MyCallBase {
void setData(User data);
void setError(String error);
}
Modelimpl
package com.gs.gg.day8.model;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import com.google.gson.Gson;
import com.gs.gg.day8.R;
import com.gs.gg.day8.bean.User;
import com.gs.gg.day8.callbase.MyCallBase;
import com.gs.gg.day8.util.HttpUtils;
import java.net.URL;
public class Modelimpl implements Model {
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String JsonStr= (String) msg.obj;
Gson gson=new Gson();
User user= gson.fromJson(JsonStr,User.class);
callBase.setData(user);
}
};
private MyCallBase callBase;
@Override
public void getData(final String mUrl, String parants, final MyCallBase callBase) {
this.callBase=callBase;
new Thread(new Runnable() {
@Override
public void run() {
try {
String json = HttpUtils.get(mUrl);
handler.sendMessage(handler.obtainMessage(0,json));
} catch (Exception e) {
Looper.prepare();
callBase.setError("異常");
Looper.loop();
}
}
}).start();
}
}
HttpUtils
package com.gs.gg.day8.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUtils {
public static String get(String mUrl) throws Exception {
URL url=new URL(mUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//設(shè)置請求方式
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
InputStream stream = connection.getInputStream();
String inputStr = getInputStr(stream);
return inputStr;
}
//把流轉(zhuǎn)成字符串
private static String getInputStr(InputStream stream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
StringBuffer sb = new StringBuffer();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
return sb.toString();
}
}
IView
package com.gs.gg.day8.view;
import com.gs.gg.day8.bean.User;
public interface IView {
void success(User data);
void error(String error);
}
Presenter
package com.gs.gg.day8.presenter;
public interface Presenter {
void startReponse(String url,String parants);
}
PresenterImpl
package com.gs.gg.day8.presenter;
import com.gs.gg.day8.bean.User;
import com.gs.gg.day8.callbase.MyCallBase;
import com.gs.gg.day8.model.Modelimpl;
import com.gs.gg.day8.view.IView;
public class PresenterImpl implements Presenter {
private IView iView;
private Modelimpl model;
public PresenterImpl(IView iView) {
this.iView = iView;
model = new Modelimpl();
}
@Override
public void startReponse(String mUrl, String parants) {
model.getData(mUrl,parants, new MyCallBase() {
@Override
public void setData(User data) {
iView.success(data);
}
@Override
public void setError(String error) {
iView.error(error);
}
});
}
public void onDotch(){
if (iView!=null){
iView=null;
}
if (model!=null){
model=null;
}
}
}
MainActivity
package com.gs.gg.day8;
import android.widget.Toast;
import com.gs.gg.day8.adapter.MyAdapter;
import com.gs.gg.day8.back.BackActivity;
import com.gs.gg.day8.bean.User;
import com.gs.gg.day8.presenter.PresenterImpl;
import com.gs.gg.day8.view.IView;
import com.gs.gg.myxlist.me.maxwin.view.XListView;
import java.util.ArrayList;
public class MainActivity extends BackActivity implements IView,XListView.IXListViewListener {
private XListView xlist_item;
private PresenterImpl presenter;
private ArrayList<User.DataBean> mlist=new ArrayList<>();
private String muUrl="http://www.xieast.com/api/news/news.php?page=";
private int i=1;
private MyAdapter adapter;
@Override
protected int getLayout() {
return R.layout.activity_main;
}
@Override
protected void initViews() {
xlist_item = findViewById(R.id.Xlist_item);
}
@Override
protected void setOnClick() {
xlist_item.setPullLoadEnable(true);
xlist_item.setXListViewListener(this);
}
@Override
protected void processLogic() {
presenter = new PresenterImpl(this);
adapter = new MyAdapter(MainActivity.this,mlist);
xlist_item.setAdapter(adapter);
presenter.startReponse(muUrl+i, null);
}
@Override
public void success(User data) {
mlist.addAll(data.getData());
adapter.notifyDataSetChanged();
stop();
}
@Override
public void error(String error) {
Toast.makeText(this, "異常", Toast.LENGTH_SHORT).show();
}
private void stop() {
xlist_item.stopRefresh();
xlist_item.stopLoadMore();
}
@Override
public void onRefresh() {
i = 1;
mlist.clear();
presenter.startReponse(muUrl + i, null);
}
@Override
public void onLoadMore() {
i++;
presenter.startReponse(muUrl + i, null);
}
}
MyAdapter
package com.gs.gg.day8.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.gs.gg.day8.R;
import com.gs.gg.day8.bean.User;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class MyAdapter extends BaseAdapter {
public MyAdapter(Context context, ArrayList<User.DataBean> mlist) {
this.context = context;
this.mlist = mlist;
}
private Context context;
private ArrayList<User.DataBean> mlist;
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int position) {
return mlist.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HolderView holder=null;
if (convertView==null){
convertView= View.inflate(context, R.layout.item,null);
holder=new HolderView();
holder.textName=convertView.findViewById(R.id.text);
holder.imageName=convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else {
holder= (HolderView) convertView.getTag();
}
User.DataBean bean = mlist.get(position);
holder.textName.setText(bean.getTitle());
ImageLoader.getInstance().displayImage(mlist.get(position).getThumbnail_pic_s(),holder.imageName);
return convertView;
}
class HolderView{
TextView textName;
ImageView imageName;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android ListView和Adapter數(shù)據(jù)適配器的簡單介紹
- 詳解xamarin Android 實(shí)現(xiàn)ListView萬能適配器
- Android ListView適配器(Adapter)優(yōu)化方法詳解
- Android ListView萬能適配器實(shí)例代碼
- Android巧用XListView實(shí)現(xiàn)萬能下拉刷新控件
- android使用flutter的ListView實(shí)現(xiàn)滾動列表的示例代碼
- Android自定義控件ListView下拉刷新的代碼
- Android通過代碼控制ListView上下滾動的方法
- Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題
- ListView通用泛型適配器
相關(guān)文章
Android框架Volley使用之Json請求實(shí)現(xiàn)
這篇文章主要介紹了Android框架Volley使用之Json請求實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-05-05
Android中實(shí)現(xiàn)WebView和JavaScript的互相調(diào)用詳解
這篇文章主要給大家介紹了關(guān)于Android中實(shí)現(xiàn)WebView和JavaScript的互相調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友下面來一起看看吧。2018-03-03
Android應(yīng)用接入微信分享的實(shí)例代碼
本篇文章主要介紹了Android應(yīng)用接入微信分享的實(shí)例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-07-07
Android開發(fā)之背景動畫簡單實(shí)現(xiàn)方法
這篇文章主要介紹了Android開發(fā)之背景動畫簡單實(shí)現(xiàn)方法,涉及Android背景動畫簡單設(shè)置與使用技巧,需要的朋友可以參考下2017-10-10
Android中View.post和Handler.post的關(guān)系
這篇文章主要介紹了Android中View.post和Handler.post的關(guān)系,View.post和Handler.post是Android開發(fā)中經(jīng)常使用到的兩個”post“方法,關(guān)于兩者存在的區(qū)別與聯(lián)系,文章詳細(xì)分析需要的小伙伴可以參考一下2022-06-06
利用Android畫圓弧canvas.drawArc()實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于利用Android畫圓弧canvas.drawArc()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
實(shí)例詳解Android自定義ProgressDialog進(jìn)度條對話框的實(shí)現(xiàn)
這篇文章主要介紹了實(shí)例詳解Android自定義ProgressDialog進(jìn)度條對話框的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-01-01

