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 Studio 格式化 Format代碼快捷鍵問題
這篇文章主要介紹了解決Android Studio 格式化 Format代碼快捷鍵問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android 桌面快捷方式實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了Android 桌面快捷方式實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android開發(fā)筆記之Android中數(shù)據(jù)的存儲方式(一)
這篇文章主要介紹了Android開發(fā)筆記之Android中數(shù)據(jù)的存儲方式(一) 的相關(guān)資料,需要的朋友可以參考下2016-01-01
android?studio?項(xiàng)目?:UI設(shè)計(jì)高精度實(shí)現(xiàn)簡單計(jì)算器
這篇文章主要介紹了android?studio?項(xiàng)目?:UI設(shè)計(jì)高精度實(shí)現(xiàn)簡單計(jì)算器,自主完成一個(gè)簡單APP的設(shè)計(jì)工作,綜合應(yīng)用已經(jīng)學(xué)到的Android?UI設(shè)計(jì)技巧,下面來看看實(shí)驗(yàn)實(shí)現(xiàn)過程2021-12-12
Android實(shí)現(xiàn)簡單的文件下載與上傳
今天小編就為大家分享一篇關(guān)于Android實(shí)現(xiàn)簡單的文件下載與上傳,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Android網(wǎng)格布局GridView實(shí)現(xiàn)漂亮的多選效果
這篇文章主要為大家詳細(xì)介紹了Android網(wǎng)格布局GridView實(shí)現(xiàn)漂亮的多選效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法
這篇文章主要介紹了Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法,介紹了是否有網(wǎng)絡(luò)連接判斷、連接的類型和監(jiān)聽網(wǎng)絡(luò)狀態(tài)的方法,需要的朋友可以參考下2014-06-06
Android消息通知Notification常用方法(發(fā)送消息和接收消息)
最近在做消息通知類Notification的相關(guān)業(yè)務(wù),利用閑暇時(shí)間總結(jié)一下,主要分為兩部分來記錄:發(fā)送消息和接收消息,對Android消息通知相關(guān)知識感興趣的朋友一起看看吧2024-02-02

