Java 从外部类提取click listener中的一些值

Java 从外部类提取click listener中的一些值,java,android,Java,Android,我有一个自定义类,它有一个唯一的接口 public class CalculatorDialog extends Dialog implements OnClickListener { TextView mView; CalculatorListener delegate = null; public CalculatorDialog (Context context, CalculatorListener delegate) { this.context = context

我有一个自定义类,它有一个唯一的接口

public class CalculatorDialog extends Dialog implements OnClickListener {
  TextView mView;
  CalculatorListener delegate = null;
  public CalculatorDialog (Context context, CalculatorListener delegate) {
    this.context = context;
    this.delegate = delegate;
  }
  public interface CalculatorListener extends OnClickListener {
    @Override void onClick(View v);
  }
  @Override void onCreate(Bundle bundle) {
    ...
    mView = (TextView) findViewById(...);
    findViewbyId(...Button...).setOnClickListener(delegate);
  }
  public String getViewText() {
    mView.getText().toString();
  }
创建CalculatorDialog的新对象时,我想实现自己的单击按钮操作,但我想从可见文本视图中获取一些字符串。
因此,在我的主要活动中,我尝试这样做:

CalculatorDialog dialogBox = new CalculatorDialog(context, new CalculatorDialog.CalculatorListener() {}
    @Override
    public void onClick(View v) {
        String test = getViewText();
    }
});
但正如你和我所认为的那样,它无法从那里访问。
这里的代码与我的项目中的代码不是1:1,但我认为它代表了我的需求。我还直接在StackOverflow上编写了它,因此它可能包含一些代码错误。

如何访问此功能?

您应该更改您的计算器列表

 public class CalculatorDialog extends Dialog implements OnClickListener {
  TextView mView;
  CalculatorListener delegate = null;
  public CalculatorDialog (Context context, CalculatorListener delegate) {
    this.context = context;
    this.delegate = delegate;
  }
  public interface CalculatorListener{
    void onClick(View v, String text);
  }
  @Override void onCreate(Bundle bundle) {
    ...
    mView = (TextView) findViewById(...);
    findViewbyId(...Button...).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             delegate.onClick(view, getViewText());
        });
  }
  public String getViewText() {
    mView.getText().toString();
  }


getViewText()位于CalculatorDialog中,而不是MainActivity中。然而
double a=CalculatorDialog.this.getQuantity()
是说,
CalculatorDialog不是一个封闭类
我编辑了我的答案,我认为这是唯一的可能性。是的,这看起来好多了。很快就会进行测试为什么你不定义你的接口方法来传回你想要的
字符串
,而不是在ClickListener上传递
呢?你是说Jesses anwser吗?是的,类似的,现在他们已经改变了它。不过,您可能并不真正需要
视图
参数。正确,我不需要它
CalculatorDialog dialogBox = new CalculatorDialog(context, new CalculatorDialog.CalculatorListener() {}
    @Override
    public void onClick(View v, String text) {
        String test = text;
    }