我不熟悉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
必须如何使用以及如何保存数据,以便对像我这样的菜鸟有用。
答案 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接口的样板。让我知道这是否有帮助