从适配器 class 到 activity 的方法调用
method call from adapter class to activity
适配器:
check_list_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JPrequirements.prepareSelection(v, getAdapterPosition());
}
});
JPrequirements
就是activity。 prepareSelection
是 activity 中的非静态方法。我无法从适配器访问它。
错误:
non static method cannot be referenced from a static context
这是对的。这就是为什么我尝试使用:
JPrequirements().prepareSelection(v, getAdapterPosition()); // Creating an instance...
但是,问题是我在这里丢失了所有 activity 组件。例如。布局组件和其他支持变量。我不想要那个。处理这个问题的最佳方法是什么?如何从适配器获取更新值到 activity?所以,我可以实时显示它。
谢谢。
您可以通过 interface
实现此目的。首先,定义一个 interface
class 为:
public interface ActivityAdapterInterface {
public void prepareSelection(View v, int position);
}
现在,将 Activity
中的 interface
实施为:
public class JPrequirements extends AppCompatActivity implements ActivityAdapterInterface {
...
public void prepareSelection(View v, int position) {
// cool stuff here
}
...
}
确保通过其构造函数将 this
接口引用传递给 Adapter
。然后最后在点击时调用它:
check_list_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mActivityAdapterInterface.prepareSelection(v, getAdapterPosition());
}
});
[编辑]
要为您的 Adapter
提供 interface
,请为其提供构造函数。
public class YourAdapter ... {
private ActivityAdapterInterface mActivityAdapterInterface;
public YourAdapter(..., ActivityAdapterInterface activityAdapterInterface) {
activityAdapterInterface = mActivityAdapterInterface;
}
}
适配器:
check_list_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JPrequirements.prepareSelection(v, getAdapterPosition());
}
});
JPrequirements
就是activity。 prepareSelection
是 activity 中的非静态方法。我无法从适配器访问它。
错误:
non static method cannot be referenced from a static context
这是对的。这就是为什么我尝试使用:
JPrequirements().prepareSelection(v, getAdapterPosition()); // Creating an instance...
但是,问题是我在这里丢失了所有 activity 组件。例如。布局组件和其他支持变量。我不想要那个。处理这个问题的最佳方法是什么?如何从适配器获取更新值到 activity?所以,我可以实时显示它。
谢谢。
您可以通过 interface
实现此目的。首先,定义一个 interface
class 为:
public interface ActivityAdapterInterface {
public void prepareSelection(View v, int position);
}
现在,将 Activity
中的 interface
实施为:
public class JPrequirements extends AppCompatActivity implements ActivityAdapterInterface {
...
public void prepareSelection(View v, int position) {
// cool stuff here
}
...
}
确保通过其构造函数将 this
接口引用传递给 Adapter
。然后最后在点击时调用它:
check_list_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mActivityAdapterInterface.prepareSelection(v, getAdapterPosition());
}
});
[编辑]
要为您的 Adapter
提供 interface
,请为其提供构造函数。
public class YourAdapter ... {
private ActivityAdapterInterface mActivityAdapterInterface;
public YourAdapter(..., ActivityAdapterInterface activityAdapterInterface) {
activityAdapterInterface = mActivityAdapterInterface;
}
}