经过一小时挫折之后,我似乎无法将我的问题写入文字中,因此无法用Google搜索,所以我转向stackoverflow以简单解释"界面方法参数自动值传递概念"。我无法解释这个问题,但我会尽力而为。
我知道java interface
是如何运作的,但我不了解它的使用方式,当涉及在android中实现listener
或其他classes
时,值通过override
方法参数传递给您。例如,当您在addTextChangedListener
上实施Edittext
时,您必须override
所有这些方法(onTextChanged
,beforeTextChanged
,afterTextChanged
)。在这些方法的参数中,值会自动传递给您,其中的参数值来自何处。通常当你override
interface
方法或任何其他方法时,你传递参数中的值,但这里以某种方式自动为你完成。通过声明var并将其设置为等于param值,该值将自动传递到您刚检索它的overridden
方法的参数中。关于这个概念的hello world
等效例子将非常受欢迎。
答案 0 :(得分:0)
public interface RequestInterface { public void execute(String val);
}
RequestInterface helloWorld= new RequestInterface () {
@Override
public void execute(String val) {
Log.i("tag", val);
}
};
private void methodThatWantsToCallAInterface(String valueToPutInside,RequestInterface command){
command.execute(valueToPutInside);
}
@Override
public void onCreate(Bundle savedInstanceState) {
methodThatWantsToCallAInterface("Some string",helloWorld); //logs "Some string"
}
答案 1 :(得分:0)
创建接口类
public interface SelectedValue {
void onSelectedData(String string);
}
在您需要的地方设置值, 在您的活动类onCreate方法()
之上private SelectedValue mCallback;
覆盖onAttach
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (SelectedValue) activity;
} catch (ClassCastException e) {
Log.d("MyDialog", "Activity doesn't implement the ISelectedData interface");
}
}
实施
公共类AyrintiliRapor扩展FragmentActivity实现了View.OnClickListener
覆盖接口类的方法
public void onSelectedData(String value) {
txt_tarih.setText("Hello"+value)}
答案 2 :(得分:-1)
/** The internal interface to extend */
public interface HelloInterface{
String displayText(String prefix);
}
/** The internal class that uses the above interface */
public class HelloWorld{
private HelloInterface myInterface;
public void setHelloInterface(HelloInterface hi){
myInterface=hi;
}
public void print(){
System.out.println(hi.displayText("Hello"));
}
}
/** Your main class */
public class myMainClass{
private HelloWorld hw = new HelloWorld();
public void doIt(){
hw.setHelloInterface(new HelloInterface{
String displayText(String prefix){
return prefix+" World!";
}
}
hw.print(); // normally called by screenRedraw, etc.
}
}