接口如何在android中工作

时间:2018-12-06 05:49:11

标签: android interface

我不熟悉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必须如何使用以及如何保存数据,以便对像我这样的菜鸟有用。

2 个答案:

答案 0 :(得分:0)

这是在两个interface之间使用Activity传递数据的方式。

注意-如果您具有要传递数据的上一类的状态,则通常使用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");

    }
  }

答案 1 :(得分:0)

如果要在活动之间传递字符串,则应在意图内传递一个额外的参数,并使用字符串的唯一标识符。

在您的父母活动中:

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接口的样板。让我知道这是否有帮助