Jef*_*rod 3 android listview android-arrayadapter android-listview onclicklistener
我可以更方便地OnClickListener为每一行注册一个唯一的ListView,但我想确保这是一个可以接受的做法.我目前的设计是一种相当复杂的方式来分离OnClickListener每行类型的关注点.
这样做的原因是我有多个行类ListView.每个班级都有完全不同的责任和行为.例如,考虑ListView可以包含子类别和书名的a.如果单击书名,则应开始显示封面图像的新活动.如果单击子类别,则会显示新的书籍和类别列表.
我希望这一行能够保持对其自身身份和责任的了解,而不是泄漏有关每一行的知识,以便由实施者维护onItemClickListener.
我还想知道这样做的性能影响与实现我自己的逻辑以确定如何处理点击有关.
是否有缺点,而不是实现onClickListener每一ListView ArrayAdapter行onItemClickListener?我正在寻找具体的数据和具体的缺点,而不是模糊的建议.
我是否应该期待内存使用,初始化时间或稳态速度(如滚动列表)受到显着影响?
您没有解释为什么每行需要单独的单击侦听器,但我建议不要这样做.查看使用View.setTag(Object)/ View.getTag()传递特定于行的自定义数据,通过该数据可以自定义(共享)单击侦听器的响应.
编辑
我从你的例子中看到为什么你想要不同的OnClickListeners附加到你的行.我的印象是你想OnClickListener为每一行提供一个单独的实例.(这是我推荐反对这一点的主要原因.)如果你有两种类型的行(类别和标题)和数百行,你只需要两种响应,而不是数百种.我也理解关于分离问题的观点.
尽管如此,我认为重写ListActivity.onListItemClick()(或调用,ListView.setOnItemClickListener()如果你没有使用a ListActivity)将更干净,更不可能干扰列表视图的操作.您可以使用委托模式,如下所示.
定义抽象类或接口:
public interface MyClickHandler {
public void onItemClick(ListView l, View v, int position, long id);
}
Run Code Online (Sandbox Code Playgroud)
然后为每种类型的行数据创建一个实现此接口的对象实例(每行不是一个实例).在适配器中,用于setTag(Object)将每行的标记初始化为适当的MyClickHander实例.在您的ListActivity.onListItemClick()覆盖中,使用以下逻辑:
protected void onListItemClick(ListView l, View v, int position, long id) {
Object tag = v.getTag();
if (tag instanceof MyClickHandler) {
((MyClickHandler) tag).onItemClick(l, v, position, id);
} else {
// default processing (if any)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |