MVPXlistView展示上拉下拉效果
本文實例為大家分享了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 實現(xiàn)ListView萬能適配器
- Android ListView適配器(Adapter)優(yōu)化方法詳解
- Android ListView萬能適配器實例代碼
- Android巧用XListView實現(xiàn)萬能下拉刷新控件
- android使用flutter的ListView實現(xiàn)滾動列表的示例代碼
- Android自定義控件ListView下拉刷新的代碼
- Android通過代碼控制ListView上下滾動的方法
- Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題
- ListView通用泛型適配器
相關(guān)文章
解決Android Studio 格式化 Format代碼快捷鍵問題
這篇文章主要介紹了解決Android Studio 格式化 Format代碼快捷鍵問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android開發(fā)筆記之Android中數(shù)據(jù)的存儲方式(一)
這篇文章主要介紹了Android開發(fā)筆記之Android中數(shù)據(jù)的存儲方式(一) 的相關(guān)資料,需要的朋友可以參考下2016-01-01android?studio?項目?:UI設(shè)計高精度實現(xiàn)簡單計算器
這篇文章主要介紹了android?studio?項目?:UI設(shè)計高精度實現(xiàn)簡單計算器,自主完成一個簡單APP的設(shè)計工作,綜合應(yīng)用已經(jīng)學(xué)到的Android?UI設(shè)計技巧,下面來看看實驗實現(xiàn)過程2021-12-12Android網(wǎng)格布局GridView實現(xiàn)漂亮的多選效果
這篇文章主要為大家詳細介紹了Android網(wǎng)格布局GridView實現(xiàn)漂亮的多選效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Android中監(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-06Android消息通知Notification常用方法(發(fā)送消息和接收消息)
最近在做消息通知類Notification的相關(guān)業(yè)務(wù),利用閑暇時間總結(jié)一下,主要分為兩部分來記錄:發(fā)送消息和接收消息,對Android消息通知相關(guān)知識感興趣的朋友一起看看吧2024-02-02