Android之 用MVP模式 來實現webview 記錄儲存與顯示,androidwebview
MVP在android上是常見的一種設計模式,在Launhcer,手機瀏覽器裡面經常會看到,觀摩了下其他大神寫的,現在總結下,操刀起來寫個demo
有什麼問題的地方請提出來。
大家一起研究討論。
demo ;http://download.csdn.net/detail/xufeifandj/8267619
demo主要是 首頁是一個webview,實現了 記錄的添加,與顯示。例子比較簡單。
整個項目的結構如下:
HistoryPresenter.java 主要是對view與model的控制相當於MVC中的 控制層吧。
具體實現添加記錄移除記錄等商務邏輯,都在HistoryModel裡面去實現了。而UI.java則是一個介面,通過商務邏輯分析,把資料交予UI去通知MainAcitivy更新View.
package com.ferris.ferrismvp.presenter;import java.util.List;import com.ferris.ferrismvp.UI;import com.ferris.ferrismvp.beam.History;import com.ferris.ferrismvp.model.HistoryModel;import com.ferris.ferrismvp.model.IHistoryModel;public class HistoryPresenter {private UI ui;private IHistoryModel iHistoryModel;public HistoryPresenter(UI ui) {// TODO Auto-generated constructor stubthis.ui=ui;this.iHistoryModel=new HistoryModel();}/** * 添加記錄 * @param hisString */public void AddHistory(History hisString){iHistoryModel.addHistory(hisString);}/** * 一掉記錄 * @param hisString */public void removeHistory(History hisString){iHistoryModel.removeHistory(hisString);}/** * 顯示所有記錄 */public void showHistorys(){List<History> histories=iHistoryModel.showAllHistory();ui.showAllHistory(histories);}}
記錄Model商務邏輯介面,添加刪除,查詢3個方法。
package com.ferris.ferrismvp.model;import java.util.List;import com.ferris.ferrismvp.beam.History;public interface IHistoryModel {public void addHistory(History history);public void removeHistory(History history);public List<History> showAllHistory();}
具體實現邏輯
package com.ferris.ferrismvp.model;import java.util.ArrayList;import java.util.List;import com.ferris.ferrismvp.beam.History;public class HistoryModel implements IHistoryModel{private List<History> historys=new ArrayList<History>();public HistoryModel() {// TODO Auto-generated constructor stub}@Overridepublic void addHistory(History history) {// TODO Auto-generated method stubhistorys.add(history);}@Overridepublic void removeHistory(History history) {// TODO Auto-generated method stubint removeId=-1;for(int i=0;i<historys.size();i++){if(historys.get(i).getUrl().equals(history.getUrl())){removeId=i;}}if(removeId!=-1){historys.remove(removeId);}}@Overridepublic List<History> showAllHistory() {// TODO Auto-generated method stubreturn historys;}}
History Bean對象
package com.ferris.ferrismvp.beam;public class History {private String title;private String url;public History() {// TODO Auto-generated constructor stub}public History(String title,String url) {// TODO Auto-generated constructor stubthis.title=title;this.url=url;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}}
UI介面類
package com.ferris.ferrismvp;import java.util.List;import com.ferris.ferrismvp.beam.History;public interface UI {public void showAllHistory(List<History> historys);}
package com.ferris.ferrismvp;import java.util.List;import com.ferris.ferrismvp.beam.History;import com.ferris.ferrismvp.presenter.HistoryPresenter;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.view.View.OnClickListener;import android.webkit.WebView;import android.widget.Button;import android.widget.Toast;public class MainActivity extends ActionBarActivity implements OnClickListener,UI{private WebView webView1 ;private Button addHistory,showHistory;private HistoryPresenter historyPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); initWebView(); historyPresenter=new HistoryPresenter(this); } private void initWebView() {// TODO Auto-generated method stubwebView1.getSettings().setJavaScriptEnabled(true); webView1.loadUrl("http://www.baidu.com"); }private void findView() {// TODO Auto-generated method stubwebView1=(WebView)findViewById(R.id.webView1);addHistory=(Button)findViewById(R.id.button1);showHistory=(Button)findViewById(R.id.button2); addHistory.setOnClickListener(this); showHistory.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1://添加記錄historyPresenter.AddHistory(new History(webView1.getTitle(),webView1.getUrl()));break;case R.id.button2://顯示記錄historyPresenter.showHistorys();break;default:break;}}@Overridepublic void showAllHistory(List<History> historys) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, historys.toString(), Toast.LENGTH_SHORT).show();} }