Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ò³Ãæ½á¹¹»¯ÔÚ Android Éϵij¢ÊÔ
 
À´Ô´£º ÌÚѶBugly ·¢²¼ÓÚ£º 2017-8-2
  1904  次浏览      28
 

µ¼ÓMVP¿ª·¢Ä£Ê½¿ÉÒÔ°ïÖúÏîÄ¿½á¹¹½âñµ«ÆäÅÓ´óµÄ·½·¨ÊýÔö¼Ó£¬½ÏΪ±¿ÖØÉè¼Æ¶ÔÓÚÊÖQÏîÄ¿²¢²»ºÜÊʺϡ£²Î¿¼Ö®Ç°Web¿ª·¢¾­Ñ飬Ìá³öÒÔÒ³Ãæ½á¹¹»¯µÄ½âñʽ×éÖ¯´úÂë¡£ÏÂÃæ½²½²LegoÔÚAndroidÉÏÒ»´ÎСС³¢ÊÔ

Ò»£¬MVP¼ò½é

MVCÌ«¹ý³£¼ûÕâÀï²»†ªà¡£Êµ¼ÊÓ¦ÓÃMVCµ±ÖУ¬ActivityÕ¼¾Ý´ò²¿·ÖµÄ¹¤×÷£¬ViewºÍControllerµÄÉí·Ý·Ö²»Çå¡£¶øMVPÔòÊÇÒ»ÖÖÉè¼ÆÄ£Ê½×¨ÃÅÓÅ»¯Activity / Fragment¡£

ÏÈÀ´¿´¿´MVPģʽµÄºËÐÄ˼Ï룺View²»Ö±½ÓÓëModel½»»¥

MVP °Ñ Activity ÖÐµÄ UI Âß¼­³éÏó³É View ½Ó¿Ú£¬°ÑÒµÎñÂß¼­³éÏó³É Presenter ½Ó¿Ú£¬Model À໹ÊÇÔ­À´µÄ Model

ÔÚMVPÉè¼ÆÄ£Ê½ÖУ¬

View£ºÓÉActivity³äµ±£¬²¢ÇÒÏìÓ¦ÉúÃüÖÜÆÚ

Model£º»¹ÊÇÔ­À´µÄÊý¾Ý²ã£¬ÍøÂ磬»º´æ£¬½âÎöµÈ¡£

Presenter£º×÷ΪViewºÍModelµÄÖмäŦ´ø£¬View²»ÄÜÖ±½Ó¶ÔModel½øÐвÙ×÷£¬±ØÐë¾­¹ýPresenter

View interface£ºÐèÒªViewʵÏֵĽӿڣ¬Viewͨ¹ýView interfaceÓëPresenter½øÐн»»¥£¬½µµÍñîºÏ

¶þ£¬ÈÕ¼£MVPʵսӦÓÃ

¡¾Mode²ã¡¿ÎÒÃÇÖ±½ÓºöÂÔ

¡¾View Interface¡¿Ê×Ò³µÄView½Ó¿Ú£¬³éÀë³öviewºÍpresnter½»»¥µÄ½Ó¿Ú¡£ÓÉActivity¼Ì³ÐʵÏÖ£¨Now.java£¬QQStoryMainActivity.java£©

public interface IMyStoryListView {
public void setData(MyStorys myStoryList, RecentStory recentStoryList);
public void setSegmentData(String key, Object data,boolean needRefreshUi);
/**
* ¸üÐÂÊý¾ÝºóˢнçÃæ×ߵĻص÷
* @param success
* @param isManualPullRefresh
*/
public void pullRefreshCompleted(boolean success,boolean isReqCompleted);
public void launchNewVideoTakeActivity(boolean autoStart, boolean checkSo, int entranceType,String extra);
public void setPlayVideoBtnDisplay(boolean display);
public void showStartDownload();
public void showDownloadCompleted(boolean success);
public void storyPreLoadCompleted(String category, String uin);
public void LoadMoreCompleted(boolean repositoryUpdated, boolean isEnd);
public void showEmptyView(boolean display);
public void requestDataCompleted();
public void openMyStoryListView(boolean open);
}

¡¾View¡¿ÎÒÃǵÄActivityʵÏÖÁËView½Ó¿Ú£¬²¢ÇÒʵÏÖÉúÃüÖÜÆÚ

public class QQStoryMainAcitivty extends QQStoryBaseActivity implements IMyStoryListView {
protected StoryHomePushYellowBarHandler mStoryHomePushYellowBarHandler = new StoryHomePushYellowBarHandler();
protected MystoryListView mainListView;
protected IMyStroyPresenter myStoryListPresenter;

@Override
protected boolean doOnCreate(Bundle savedInstanceState) {
super.doOnCreate(savedInstanceState);
mainListView = (MystoryListView) super.findViewById(R.id.qqstory_story_main_listview);
//Presenter
myStoryListPresenter = new StoryListPresenter(this);
myStoryListPresenter.setIView(this);
return true;
}

@Override
public void onStartAutoRequestFromNet() {
startTitleProgress();
mainListView.pullToRefresh();
mStoryHomePushYellowBarHandler.clearYellowBar();
myStoryListPresenter.requestAllDataFromNet();
}

private void startTitleProgress(){
// do more
}
}

¾Ù¸öÀý×Ó£¬Óû§ÏÂÀ­Ë¢ÐÂһϡ£´¥·¢µ½ActivityµÄonStartAutoRequestFromeNet¡£ViewÂß¼­ÔÚActivity¡£

ÒµÎñÂß¼­ÔòÓÉPresnterµÄrequestAllDataFromNetȥʵÏÖ¡£

¡¾Presenter¡¿¾ßÌåµÄView->Model,Mode->ViewÓÉÕâÀïʵÏÖ£¬ÆäÖÐViewÊÇÓÐView½Ó¿Ú³éÏ󣬽øÒ»²½¹æ·¶»¯ViewµÄÂß¼­¡£

±ØÒªÊÇ¿ÉÒÔ³é³öPresenter½Ó¿Ú£¨ÆäʵÈÕ¼£ÕâÀïûÓбØÒª£©

public class StoryListPresnter implements IMyStroyPresenter{
protected IMyStoryListView mIView;
protected FeedItem mFeedItem;
protected ParallelStepExecutor mRequestNetDataExecutor;

@Override
public void onCreate(boolean needUpdateFromNet) {
// ÉúÃüÖÜÆÚµÄÂß¼­´¦Àí
mFeedItem = new FeedItem();
}

@Override
public void setIView(IMyStoryListView IView) {
// ÉèÖÃView½Ó¿Ú(ĿǰʵÏÖµÄÊÇActivity£¬µ«ÆäʵÓÉÆäËûFragment£¬ViewʵÏÖ¶¼ÊÇ¿ÉÒԵģ¬Õâ¾ÍÊÇMVPµÄºÃ´¦Ö®Ò»£¬½âñî)
mIView = IView;
}
public boolean requestAllDataFromNet() {
mRequestNetDataExecutor.addStep(new GetUserSelfInfoStep(null))
.addStep(new ReportWatchVideoListStep(StoryListPresenter.this))
.addStep(new GetUserGuideInfoStep(StoryListPresenter.this))
.onCompleted(new SimpleStepExector.CompletedHandler() {

@Override
public void done(FeedItem item) {
// α´úÂë
mFeedItem = item; // ´¦ÀíModel²ã
mIView.openMyStoryListView(mFeedItem); // ¸ù¾ÝView½Ó¿Úµ÷ÓÃView¸üÐÂ
}
}).run();
}

}

MVPµÄÓÅȱµã£º

Óŵ㣺

½âñ¾ø¶ÔµÄ¡£²»È»³éÕâô¶à½Ó¿Ú¸ÉÂï

Ä£¿éÖ°ÔðÃ÷È·£¬²ã´ÎÇåÎú

Presenter¿É¸´Óã¨ÔÚÈÕ¼£µÄÐèÇóÖУ¬Ê×Ò³ºÍ4Tab¹«ÓÃÒ»¸öPresnter£©

·½±ãµ¥Ôª²âÊÔ

±ÜÃâActivityÄÚ´æÐ¹Â¶£¬ AcitvityÒ»ÉíÇáËÉ

MVPµÄȱµãÒ²ÊǷdz£Ã÷È·µÄ£º

·Ç³£µÄ±¿ÖØ¡£Ò»¸öView¾Í¶ÔÓ¦Ò»¸öPresenter£¬ÇáÒµÎñÒ»¸öActivityÄܽâ¾öµÄ¾Í²»Òª½â¾ö

PresnterÒÀÈ»Âß¼­·±ÖØ¡£AcitivtyÇáËÉÁË£¬ÒµÎñÂß¼­ÅÓ´óµÄʱºòPresnterÒÀÈ»ÊÇ´óÅÖ×Ó¡£

´úÂ븴ÔÓ¶È£¬Ñ§Ï°³É±¾¡£ÕâÍæÒâ²»ºÃÀí½â£¬ÐèҪʵսÖÐÀí½â¡£

ÔÚÊÖQÏîÄ¿ÀMVP»á¼¤ÔöºÜ¶à·½·¨Êý¡£

Èý£¬LegoÒ³Ãæ½á¹¹»¯

Ç°ÃæÆÌµæÕâô¶à£¬ÖÕÓÚµ½ÎÒÒª´µË®µÄʱºòÁË¡£MVC£¬MVP£¬»¹ÓÐMVVMµÈMVXϵÁеÄÉè¼ÆÄ£Ê½£¬¶¼ÊÇÒ»ÖÖ´ó¶øÈ«µÄͳһ¹ÜÀí¡£ÔÚÏîÄ¿½á¹¹ÖÐ×îΪ¹Ø¼üÆäʵÊÇ£º·ÖÄ£¿é£¡

¿´¿´Ä³±¦µÄÊ×Ò³£¬¶¥²¿ËÑË÷À¸£¬banner£¬µ¼º½·ÖÀ࣬ÇÀ¹º£¬Ìؼۣ¬µ×²¿Tab¡£ÕâÊÇÒ»¸öActivityµÄ»°£¬ÄãÔÙÔõôMVP£¬Ò²ÊÇÐèÒª»®·ÖÄ£¿é£¬È»ºó·Ö¶øÖÎÖ®¡£

Ò»¸öÔÙ´óµÄϵͳ£¬¶¼¿ÉÒÔ»®·ÖÒ»¸ö¸öСµÄÄ£¿é£¬·Ö¶øÖÎÖ®

Ò³Ãæ½á¹¹»¯£¬²¢²»ÊÇÐÂÍæÒ⣬Êǵ±Ê±×öwebµÄÒ»Ì×´úÂë·ç¸ñ¡£ÏÂͼÊǵ±Ê±×öWeb×ܽá×é¼þ»¯µÄÒ»ÕÅͼ¡£ÏÖÔÚ¿´À´£¬Ò²¾Í²¢Ã»Óйýʱ

Ò³Ãæ±»»®·ÖÎÊÒ»¸ö¸öÇøÓòµÄÄ£¿é£¬ÓÐ×ÔÉíµÄÂß¼­ºÍ¹æ»®¡£ÓÐÈË˵£¬Õâ²»¾ÍÊÇÒ»¸ö¸ö×é¼þÂȻºó¡°Ò³Ãæ½á¹¹»¯¡±²¢²»ÊÇÖ¸×é¼þ¡£

ÀýÈçÉÏͼµÄtabContainer£¬imgsContainer£¬listContainer£¬Ã¿Ò»¸öÄ£¿é¶¼ÓÐ×Ô¼ºµÄäÖȾģ°å£¨xml£©£¬ÇëÇóµÄÊý¾ÝµÄCGI£¨Êý¾ÝÔ´£©£¬×ÔÉíµÄʼþ°ó¶¨£¨listener£© £¬×´Ì¬»ú£¨ÉúÃüÖÜÆÚ£©£¬²¢²»Ö»ÊÇÒ»¸ö×é¼þ£¬¶øÊÇÒ»¸ö¸öÓÐ×Ô¼ºÉúÃüÁ¦£¬ÄÜ×Ô¼º¹ÜÀíµÄÐ¡Ò³Ãæ¡£

¸ù¾ÝÒ³Ãæ½á¹¹£¬»®·Ö³öÒ»¸ö¸ö¶ÀÁ¢Î¬»¤Ä£¿é£¬Õâ¾ÍÊÇÒ³Ãæ½á¹¹»¯¡£

Ò³Ãæ½á¹¹»¯£¨Lego£©Óë×é¼þ»¯µÄÇø±ð

×é¼þ´¦ÓÚͨÓÃÐÔ£¬ÊDz»´øÒµÎñÂß¼­µÄ¡£¶øÒ³Ãæ½á¹¹»¯ÊÇ´øÒµÎñÂß¼­¡£

Ò³Ãæ½á¹¹»¯Ä¿µÄÊÇΪÁË´úÂëά»¤ÐÔ£¬ÏîÄ¿¹ÜÀí£¬ÓÅ»¯¡£×é¼þ¸´ÓÿÉÒÔÓУ¬µ«²»ÊDZØÒª

×é¼þÓëLego²»³åÍ»¡£×é¼þ +Êý¾Ý£¬ÒµÎñÂß¼­ = Lego

ÏÂÃæ¾ÍÒÔÎÊ´ðµÄÐÎʽ£¬ÓÃÈÕ¼£ÆÀÂÛÔÞÏîĿʵս£¬À´½²½âLegoºÃ´¦

ËÄ£¬·ÖÎöÒ³Ãæ½á¹¹»¯ÌØÐÔ

Lego×Ô¼ºÀ­È¡×Ô¼ºµÄÊý¾Ý£¬Èç¹ûÒ»¸öÒ³Ãæ5,6¸öÄ£¿é£¬¾ÍÀ­5,6·ÖPBЭÒ飬̸ºÎÐÔÄÜ£¿

ÕâÀï´ø³öLegoÁ½¸öÌØÐÔ£º

ÿ¸öLegoÊÇÓÐ×Ô¼ºµÄÊý¾Ý£¬²¢²»ÊÇÒ»¶¨Òª×Ô¼ºÀ­È¡£¬Êý¾Ý¿ÉÒÔÓÐÆäËûLego´«µÝ

LegoÓи¸×Ó¹ØÏµ¡£Ò»¸öÒ³Ãæ/ActivityÐèÒªÒ»¸ö¶¥²ãLego¹ÜÀí

ÈÕ¼£Ê×Ò³ÆÀÂÛÔÞ

public FeedCommentLikeLego (Context context, Activity activity, ViewGroup parentView, HomeFeedItem feedItem, int feedType) {
super(context, parentView);
mHomeFeedItem = feedItem;
mFeedItem = feedItem.mFeedBasicItem;
mActivity = activity;
mFeedType = feedType;
mLikeManager = (LikeManager) SuperManager.getAppManager (SuperManager.LIKE_MANAGER);
mParentView = LayoutInflater.from(context).inflate (R.layout.qqstory_feed_commentlike_view, parentView, true);

// Ò³Ãæ½á¹¹
FeedCommentLego commentLego = new FeedCommentLego (mContext, mParentView, mFeedItem, mFeedType);
FeedLikeLego likeLego = FeedLikeLego.createIndexFeedLikeLego (mContext, activity, mParentView, mFeedItem, mFeedType);
addLego (LEGO_KEY_COMMENT, commentLego);
addLego (LEGO_KEY_LIKE, likeLego);
commentLego.feed (mHomeFeedItem.getCommentList());
likeLego.feed (mHomeFeedItem.getLikeEntryList());
boot();
}

´ÓFeedCommentLikeLegoµÄ¹¹Ôì·½·¨£¬ÎÒÃǵÃÖª

ÎÒÊǰְ֣¬ÎÒÓÐÁ½¸ö¶ù×Ó

ÎÒÁ½¸ö¶ù×Ó²»ÕùÆø£¬ÐèÒªÎÒÀ´Î¹ÑøÊý¾Ý£¬×Ô¼º²»»áÕõÇ®£¨×Ô¼º²»À­Êý¾Ý£©

È«¼ÒÎÒÊÇÒ»¼ÒÖ®Ö÷£¬Æô¶¯ÎÒ˵ÁËË㣨LegoÆô¶¯bootºó£¬»á×Ô¼ºÀ­Êý¾Ý×Ô¼ºäÖȾ£¬Í¬Ê±×ÓLegoÒ²»áÏà¼Ìboot£©

ÈÕ¼£710ÕâÀï¾ÍÓг¡¾°£¬ÌåÑé³öLegoÇл»Êý¾ÝÔ´µÄÓÅÊÆ¡£

¡¾Ê×Ò³¡¿³öÓÚÐÔÄÜÓÅ»¯£¬¶¼»á×öÇëÇóºÏ²¢¡£·µ»Ø¶à¸öFeedµÄÊÓÆµÁÐ±í£¬ÆÀÂÛÔÞÁбíÊý¾Ý¡£

commentLego.feed(mHomeFeedItem.getCommentList());
likeLego.feed(mHomeFeedItem.getLikeEntryList());

±»Î¹ÑøÊý¾Ýºó£¬LegoÄÚ²¿µÄDataProvider½«²»Æô¶¯

¡¾ÏêÇéÒ³¡¿Í¬Ò»Lego£¬Ä¬ÈÏÇé¿ö¾Í»áÆô¶¯×ʽðµÄDataProvider£¬»á×Ô¼ºÀ­Êý¾Ý

@Override
public LegoDataProvider getDataProvider() {
return new FeedLikeDataProvider(this, mIsDetailPage);
}

Ò»¸öLegoÀàÊǾ¿¾¹ÊÇʲô£¿LegoÀàÖ®¼äµÄŦ´ø£¿

´ó²¿·ÖÒ³ÃæµÄäÖȾÁ÷³ÌÏߣ¬ÈçÏÂͼ

ÎÒÃǰÑÕâЩ³£ÓõÄÍøÂçÇëÇ󣬴¦ÀíÊý¾Ý£¬Ê¼þ°ó¶¨£¬Éϱ¨£¬ÈÝ´í´¦ÀíµÈһϵÁÐÂß¼­·½·¨£¬ÒÔÒ³Ãæ¿éΪµ¥Î»·â×°³ÉÒ»¸öLegoÄ£¿é¡£

ÕâÑùµÄÒ»¸ö³éÏó²ãLego£¬ÎÒÃÇ¿ÉÒÔÇåÎúµØ¿´µ½¸ÃÒ³Ãæ¿é£¬ÇëÇóµÄÊý¾ÝÊÇʲô£¬°ó¶¨ÁËʲôʼþ£¬×öÁËʲôÉϱ¨£¬³ö´íÔõô´¦Àí¡£

×îºó¼ÓÉÏÉúÃüÖÜÆÚ£¬Ò³Ãæ½á¹¹»¯µÄLego£¬ÒѾ­ËãÊÇÒ»¸öÍêÕûµÄ¹¦Äܵ¥ÔªÁË¡£

¼Ì³ÐLegoBase£¬Óм¸¸öºËÐĵķ½·¨ÐèÒªÖØÐ´£º

»¹ÓÐÉúÃüÖÜÆÚ·½·¨¿ÉÒÔÖØÐ´£¬µ«²»ÊDZØÒªµÄ¡£

ÄãÔĶÁ/½ÓÊÖÒ»¸öLegoÀ࣬»áÊǼþºÜÇáËɵÄÊÂÇé¡£Ò»¸öLegoÀ࣬ºËÐÄ·½·¨Õ⼸¸ö£¬ÆäÓà¶¼ÊÇÒµÎñÂß¼­·½·¨¡£

¸ÄʼþÈ¥¸ÃLegoµÄEventHandler£¬Êý¾ÝÒª¸ÄÈ¥DataProvider£¬²úÆ·ÒªÇó´óV²Åչʾµ×²¿Î²°Í£¬ºÃ£¬È¥render·½·¨ÕÒ¡£

LegoÖ®¼äµÄŦ´ø£¬ÓÐÈý¸ö£º

parentView£¨¹«ÓÃxml£©

feedData£¨¹«ÓÃÊý¾Ý£©

getLego£¨Lego¹ØÏµ£©

Î壬×ܽá

LegoµÄºËÐÄ˼ÏëÊÇ£ºÒ³Ãæ½á¹¹·ÖÄ£¿é£¬·Ö¶øÖÎÖ®¡£½âñ´úÂë¿É¶ÁÐԸߣ¬µ×²ãͳһÓÅ»¯¡£

ÔÚʹÓÃÁËÁ½¸ö°æ±¾Ö®ºó£¬¸Ð¾õÍê³É¶È»¹ÊDz»¹»¡£

¶¥²ãLegoÇé¿ö¸´ÔÓ£¬µ×²ãͳһÓÅ»¯²»ºÃ×ö

½Ó¿ÚÖ®¼äÔ¼Êø£¬²»¹»×ÔÓÉ

µ«ÊǶԱÈMVP£¬LegoÄÜÌåÑé³öÇá±ã£¬Âß¼­ÇåÎú£¬·½·¨ÊýÁ¿ÉÙµÄÓÅÊÆ¡£

LegoÒ³Ãæ½á¹¹»¯µÄÓ¦ÓÃÆäʵ»¹ÔÚ³¢ÊԽ׶Ρ£ÒÔÉÏËãÎÒµÄһЩ¸öÈË˼¿¼ºÍ×ܽᡣ

   
1904 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì