为什么我不能调用接口方法?

时间:2018-01-22 17:11:00

标签: java android delegates

免责声明:我来自Swift,所以我对委托如何运作的想法是有偏见的。

我定义了一个接口:

public interface IChatButtonResponse {
    void chat(ListingEntry listingEntry, String initialUserText);
}

我的类有一个本地引用,在实例化时保存:

public class ListingAdapter extends BaseAdapter {
    private IChatButtonResponse delegate;

    public ListingAdapter(Context context, ArrayList<ListingEntry> listingEntries, IChatButtonResponse delegate) {
        this.delegate = delegate;

当我尝试调用代理以响应按钮时,我收到编译错误:

chatButton.setOnClickListener(new View.OnClickListener() {
    delegate.chat(listingEntry, null);  // Cannot resolve symbol 'chat'
});

为什么不能解决?我尝试在公共接口中进行方法声明,但这并没有改变任何东西。 (如果确实如此,我会感到惊讶)

编辑: 我在同一个包中使用的界面:

public class MainActivity extends AppCompatActivity implements IChatButtonResponse {

。 。

@Override
void chat(ListingEntry listingEntry, String initialUserText) {

}

我在这里收到编译错误:'chat(ListingEntry, String)' in ...sample.app.MainActivity' clashes with 'chat(ListingEntry, String) in ...sample.app.IChatButtonResponse'; attempting to assign weaker access privileges ('package-private'); was 'public'

尝试公开实施方法而不做任何改变。

1 个答案:

答案 0 :(得分:0)

对于有问题的原始错误,找到了我之前在chatButton.setOnClickListener上没有注意到的另一个错误的线索。

onClickListener方法onClick必须像这样重写:

chatButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {
        String referenceID = listingEntry.referenceID;
        delegate.chat(listingEntry,null);
    }
 });

这可以修复呼叫站点的分辨率错误。