【问题标题】:How interfaces works in android接口在android中是如何工作的
【发布时间】:2018-12-06 05:49:11
【问题描述】:

我是Android 开发的新手,发现很难理解interfaces 如何在Activities 之间传递值。

我创建了一个Interface

public interface ValuePasser {
    void valueObtained(String value);
}

在第一个活动中,我将值设置为

public class MainActivity extends AppCompatActivity implements ValuePasser {

ValuePasser valuePasser;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    valuePasser = (ValuePasser) this;
    valuePasser.valueObtained("test Value");


    Intent i = new Intent(this, Main2Activity.class);
    startActivity(i);

}

  @Override
  public void valueObtained(String value) {
      Log.d("TAG", "TAg");
   }
}

第二次Activity,我试图获得像

public class Main2Activity extends AppCompatActivity implements ValuePasser {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
 }

  @Override
  public void valueObtained(String value) {
      Toast.makeText(Main2Activity.this, value, Toast.LENGTH_SHORT).show();
  }
}

它不工作,你能说一下interfaces 必须如何使用以及它如何保存数据,以便对像我这样的菜鸟有用。

【问题讨论】:

标签: android interface


【解决方案1】:

这是您可以在两个Activity 之间使用interface 传递数据的方法。

注意 - Interface 主要用于如果您具有要在其中传递数据的上一个类的状态。在这里,您接收数据的活动应该首先开始,并且您需要该活动的 Context 处于暂停状态。如果您的活动被破坏并且您没有活动的Context 仍然想传递数据,那么最好使用putExtra,因为interface 在这种情况下将不起作用。

这是您将通过interface接收数据的活动

public class RecieverActivity extends AppCompatActivity implements ValuePasser {

public static ValuePasser valuePasserSecondActivity; // this will be static so that you can use it in your main activity from where you have to send the data

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    valuePasserSecondActivity = this;
 }

  @Override
  public void valueObtained(String value) {
      Toast.makeText(RecieverActivity.this, value, Toast.LENGTH_SHORT).show();
  }
}

这是您的活动,您将从那里通过interface发送数据

    public class SendDataActivity extends AppCompatActivity{

    private ValuePasser valuePasserFirstActivity; // your interface

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        valuePasserFirstActivity = RecieverActivity.valuePasserSecondActivity; // intialize it with the Reciever's end activity interface

        if(valuePasserFirstActivity!=null)
          valuePasserFirstActivity.valueObtained("test Value");

    }
  }

【讨论】:

  • 说真的!!!! ? Main2Activity 尚未加载,如果未加载,您将无法使用它的 Context。这不是您在活动之间传递数据的方式。
  • @ADM 我在解释界面的流程。我知道Main2Activity 应该首先加载以获取interface 的响应。我也编辑了我的答案。
  • 如果你已经知道,那么你不应该用这个例子来解释。这段代码我要去 Blast ..
【解决方案2】:

如果你想在活动之间传递一个字符串,你应该在你的意图中传递一个额外的参数,使用你的字符串的唯一标识符。

在您的父活动中:

Intent i = new Intent(this, Main2Activity.class);
i.putExtra("your_string_identifier", "string value");
startActivity(i);

在您的目标活动中:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String yourString = getIntent().getStringExtra("your_string_identifier");
}

否则,如果您想传递结构化数据,您应该使用 Parcelable 接口,如这个简单的tutorial 中所述。或者,您可以使用 johncarl81 的Parceler library,它消除了 Parcelable 接口的大部分样板。让我知道这是否有帮助

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2015-11-20
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2010-10-25
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多