免责声明:我来自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'
尝试公开实施方法而不做任何改变。
答案 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);
}
});
这可以修复呼叫站点的分辨率错误。