Skip to content
Jude edited this page Apr 9, 2016 · 10 revisions

BeamDataActivity & BeamDataActivityPresenter & BeamDataFragment & BeamDataFragmentPresenter

数据模型式的Activity与Fragment模板。支持Rx函数式调用。

data
例。对于这样的数据展示页面。本模板能极大简化工作。

##API Activity&Fragment 重写以下2个方法:
public void setData(M data){}发布数据时,会回调这个方法。根据数据刷新UI。
public void setError(Throwable e){}发布错误时,会回调这个方法。修改UI。

Presenter
发布数据:
void setData(M data)发布数据。可多次调用。如果发布时View没有注册。会等到View注册时再发布。
M getData()获取当前已发布的数据。
void refresh()重新发布当前数据,可以直接修改当前数据后刷新。
void publishError(Throwable e)发布错误。

使用RxJava可以直接把提供的Subscriber订阅到你的Observable
Observable<M>.just(produceData()).unsafeSubscribe(getDataSubscriber());

如果是数据直接从Intent传进来的。则会自动发布:
启动DataPresenter时会自动从Intent里读取并发布key为BeamBasePresenter.KEY_DATAParcelable对象。 所以这种情景可以直接使用:
void startActivityWithData(Parcelable data,Class<? extends Activity> clazz)

##例子## Activity:

    @RequiresPresenter(PlaceDetailPresenter.class)
public class PlaceDetailActivity extends BeamDataActivity<PlaceDetailPresenter, PlaceDetail> {

    @InjectView(R.id.toolbar)
    Toolbar toolbar;
    @InjectView(R.id.picture)
    RollPagerView picture;
    @InjectView(R.id.score)
    ScoreView score;
    @InjectView(R.id.score_text)
    TextView scoreText;
    @InjectView(R.id.evaluate)
    TAGView evaluate;
    @InjectView(R.id.address)
    TextView address;
    @InjectView(R.id.fish_type)
    TextView fishType;
    @InjectView(R.id.tel)
    TextView tel;
    @InjectView(R.id.price)
    TextView price;
    @InjectView(R.id.content)
    TextView content;
    @InjectView(R.id.server)
    ExGridView server;
    TAGView commentCount;
    PictureAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place_activity_detail);
        getExpansion().showProgressPage();
        ButterKnife.inject(this);
        picture.setAdapter(adapter = new PictureAdapter());
    }

    @Override
    public void setData(PlaceDetail data) {
        getExpansion().dismissProgressPage();
        commentCount.setText(data.getEvaluateCount()+"");
        score.setScore(data.getScore());
        scoreText.setText(data.getScore() + "");
        address.setText(data.getAddress());
        fishType.setText(data.getFishType());
        tel.setText(data.getTel());
        price.setText("人均消费:" + data.getCost() + "元");
        content.setText(data.getContent());
        adapter.setPath(data.getPicture());
    }
}

Presenter:

public class PlaceDetailPresenter extends BeamDataActivityPresenter<PlaceDetailActivity,PlaceDetail> {

    @Override
    protected void onCreate(PlaceDetailActivity view, Bundle savedState) {
        super.onCreate(view, savedState);
        PlaceModel.getInstance().getPlaceDetail(getView().getIntent().getIntExtra("id",0)).unsafeSubscribe(getDataSubscriber());
    }
}
Clone this wiki locally