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