2016-09-02 35 views
0

适配器:方法调用活动

check_list_item.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     JPrequirements.prepareSelection(v, getAdapterPosition()); 
    } 
}); 

JPrequirements是活性。而prepareSelection是活动内部的非静态方法。我无法从适配器访问它。

错误:

non static method cannot be referenced from a static context

这是正确的。这就是为什么我试着用:

JPrequirements().prepareSelection(v, getAdapterPosition()); // Creating an instance... 

但是,问题是我在这里失去了所有的活动组件。例如。布局组件和其他支持变量。我不想那样。处理这个问题的最佳方法是什么?我如何从适配器获取更新的值到活动?所以,我可以实时显示它。

谢谢。

+0

您可以使用一个接口。 –

回答

2

您可以通过interface来实现此目的。首先,定义一个类interface如:在

public interface ActivityAdapterInterface { 
    public void prepareSelection(View v, int position); 
} 

现在,实现interfaceActivity为:

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

[编辑]

为了提供interfaceAdapter提供它的构造。

public class YourAdapter ... { 

    private ActivityAdapterInterface mActivityAdapterInterface; 

    public YourAdapter(..., ActivityAdapterInterface activityAdapterInterface) { 
     activityAdapterInterface = mActivityAdapterInterface; 
    } 

} 
+0

完全是这样的:-) –

+0

如何在适配器中获得'mActivityAdapterInterface'? –

+0

@RonakPatel检查我的适配器上面 – Shaishav