在片段内的listview内响应Button的最佳方法

时间:2014-12-31 03:00:07

标签: android android-listview fragment onclicklistener

Button位于ListViewItem内的ListViewFragment Activity。我有代码成功通知主持人Activity被点击的按钮。虽然代码有效,但我想确保这是这里使用的最佳设计模式。

以下是代码摘要:

  1. MainActivitythis)将自身的引用(Fragment)传递给名为mainActivityReference的变量中的Fragment

  2. ArrayAdapter将此引用传递给名为mainActivityReference的变量中的ArrayAdapter对象。

  3. 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}}
  4. 这看起来像犹太人吗?或者我应该使用类似LocalBroadcastManager的东西吗?

1 个答案:

答案 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());
        }
    }
});