Button
位于ListViewItem
内的ListView
中Fragment
Activity
。我有代码成功通知主持人Activity
被点击的按钮。虽然代码有效,但我想确保这是这里使用的最佳设计模式。
以下是代码摘要:
MainActivity
(this
)将自身的引用(Fragment
)传递给名为mainActivityReference
的变量中的Fragment
。
ArrayAdapter
将此引用传递给名为mainActivityReference
的变量中的ArrayAdapter
对象。
在getView
onClickListener
方法中,我设置mainActivityReference
并在 viewHolder.soundButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Sound button tapped at position " + position);
mainActivityReference.chooseSoundForIndex(position);
}
});
内调用方法,并将项目的索引位置作为参数调用如下:
{{1}}
这看起来像犹太人吗?或者我应该使用类似LocalBroadcastManager的东西吗?
答案 0 :(得分:1)
传递"所有者的基本策略"对适配器的对象是非常犹太的,而且很常见。通常我会创建一个监听器接口,并让父活动或片段实现接口。由于您的活动是响应点击,因此您甚至不需要将引用传递给片段,然后再传递适配器。您可以获取View的上下文,并检查它是否实现了该接口。像这样:
public interface SoundChooser {
void chooseSoundForIndex(int position);
}
viewHolder.soundButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Sound button tapped at position " + position);
Context context = v.getContext();
if (context instanceof SoundChooser) {
((SoundChooser)context).chooseSoundForIndex(position);
} else {
Log.w(TAG, "Activity should implement SoundChooser:" + context.getClass().getName());
}
}
});