【发布时间】:2015-05-27 16:35:26
【问题描述】:
我遇到了一个关于为我的 RecyclerView 项目设置 OnItemClickListener 的问题。我尝试按照 Android Studio 的 RecyclerView 示例中描述的方式设置监听器。所以在 ViewHolder 类中为我的 RecyclerView 设置了一个监听器。
public class ProgramViewHolder extends RecyclerView.ViewHolder {
protected TextView vName;
protected ImageView vProgramImage;
public ProgramViewHolder(View v) {
super(v);
vName = (TextView) v.findViewById(R.id.programName);
vProgramImage = (ImageView) v.findViewById(R.id.programImage);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// HERE PROBLEM !!
MainActivity.openSettings(1);
}
});
}
}
现在我想调用我的 MainActivity openSettings(int) 的一个方法来加载片段:
public void openSettings(int layoutId) {
settingsFragment setFrag = new settingsFragment();
Bundle information = new Bundle();
information.putInt("layoutId", layoutId);
setFrag.setArguments(information);
getFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, setFrag)
.commit();
}
但是现在问题来了。当我尝试编译时,它说“不能从静态上下文引用非静态方法 'openSettings(int)'。” 我完全不明白这个错误。为什么它是静态上下文? ProgramViewHolder 类没有声明为静态的。
还有最重要的部分:我该如何解决?我想为 RecyclerView 的每个项目设置一个 OnClickListener 并调用 MainActivity 的公共方法。
非常感谢您花时间帮助我。
【问题讨论】:
-
MainActivity.this.openSettings(1) ?
-
为什么不将打开的设置移动到处理程序类?
-
然后它说,“'MainActivity' 不是封闭类。
-
好吧,我想我需要从 MainActivity 中获取 FragmentManager。据我了解,我无法从 Adapter 类中调用 getFragmentManager() ..
标签: java android static onclick android-recyclerview