首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mortar:如何使用Presenter for List Item/Adapter

Mortar:如何使用Presenter for List Item/Adapter
EN

Stack Overflow用户
提问于 2015-01-22 16:42:12
回答 2查看 746关注 0票数 2

我使用带有ViewHolder的自定义适配器和带有按钮的项目视图的列表。我想通过单击演示者中的按钮来处理一些事情。

如何将演示者与这些项目视图连接起来?

EN

回答 2

Stack Overflow用户

发布于 2015-01-29 12:43:20

您可以通过以下方式使用rx-android观察AdapterView的单击事件。它与迫击炮中使用的MVP模式结合得很好。最初的依赖关系:

代码语言:javascript
复制
compile 'io.reactivex:rxjava:1.0.4'    
compile 'io.reactivex:rxandroid:0.24.0'

然后在视图类中创建observeClicks方法。

代码语言:javascript
复制
public Observable<OnItemClickEvent> observeClicks() {
    return WidgetObservable.itemClicks(adapterView);
}

订阅演示者onLoad中的活动

代码语言:javascript
复制
private Subscription clicks;

@Override
protected void onLoad() {
    super.onLoad();
    clicks = getView().observeClicks().subscribe(
        new Action1<OnItemClickEvent>() {
            @Override
            public void call(OnItemClickEvent event) {
                // handle click events 
            }
        }
    );
}

protected void onDestroy() {
    // unsubscribe from events
    clicks.unsubscribe();
}

此外,您还可以将OnItemClickEvent映射到视图中的数据,并观察它而不是原始事件。

代码语言:javascript
复制
public Observable<YourDataClass> observeClicks() {
    return WidgetObservable.itemClicks(adapterView).
           map(new Func1<OnItemClickEvent, YourDataClass>() {
                @Override
                public YourDataClass call(OnItemClickEvent onItemClickEvent) {
                     YourDataClass item = adapter.getItem(onItemClickEvent.position());
                     return item;
                }
           });
}

希望这个能派上用场。至少我是这样做的,但这肯定不是唯一的解决方案。

票数 2
EN

Stack Overflow用户

发布于 2015-01-22 17:04:11

代码语言:javascript
复制
ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //Handle your stuff here.
    });

像这样的东西?使用该位置将当前项目从列表中删除。

按钮:

代码语言:javascript
复制
// In the adapter
Button butt = (Button) rowView.findViewById(R.id.yourbutton);
butt.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //Button Action.
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28084367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档