Java / android接口方法自动参数传递概念

时间:2014-07-11 18:38:06

标签: java android android-edittext

经过一小时挫折之后,我似乎无法将我的问题写入文字中,因此无法用Google搜索,所以我转向stackoverflow以简单解释"界面方法参数自动值传递概念"。我无法解释这个问题,但我会尽力而为。

我知道java interface是如何运作的,但我不了解它的使用方式,当涉及在android中实现listener或其他classes时,值通过override方法参数传递给您。例如,当您在addTextChangedListener上实施Edittext时,您必须override所有这些方法(onTextChangedbeforeTextChangedafterTextChanged)。在这些方法的参数中,值会自动传递给您,其中的参数值来自何处。通常当你override interface方法或任何其他方法时,你传递参数中的值,但这里以某种方式自动为你完成。通过声明var并将其设置为等于param值,该值将自动传递到您刚检索它的overridden方法的参数中。关于这个概念的hello world等效例子将非常受欢迎。

3 个答案:

答案 0 :(得分:0)

  1. 使用某种方法创建一个界面,除了某些内容之外。
  2. 创建此接口的实例,该实例将覆盖该方法并执行某些操作。
  3. 创建一个需要此接口作为参数的方法。
  4. 使用您在2. point中创建的参数调用此方法,如果您的接口需要参数,则调用另一个参数。
  5. 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.
    }
}