我使用带有ViewHolder的自定义适配器和带有按钮的项目视图的列表。我想通过单击演示者中的按钮来处理一些事情。
如何将演示者与这些项目视图连接起来?
发布于 2015-01-29 12:43:20
您可以通过以下方式使用rx-android观察AdapterView的单击事件。它与迫击炮中使用的MVP模式结合得很好。最初的依赖关系:
compile 'io.reactivex:rxjava:1.0.4'
compile 'io.reactivex:rxandroid:0.24.0'然后在视图类中创建observeClicks方法。
public Observable<OnItemClickEvent> observeClicks() {
return WidgetObservable.itemClicks(adapterView);
}订阅演示者onLoad中的活动
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映射到视图中的数据,并观察它而不是原始事件。
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;
}
});
}希望这个能派上用场。至少我是这样做的,但这肯定不是唯一的解决方案。
发布于 2015-01-22 17:04:11
ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Handle your stuff here.
});像这样的东西?使用该位置将当前项目从列表中删除。
按钮:
// In the adapter
Button butt = (Button) rowView.findViewById(R.id.yourbutton);
butt.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//Button Action.
}
}https://stackoverflow.com/questions/28084367
复制相似问题