4 回答
TA贡献1801条经验 获得超15个赞
在类上实现接口并不意味着它会自动获得调用。
例如,如果 B 类,A 类只能将数据传递给 B 类:
实现接口。
A 类持有指向 B 类对象的接口实例
在你的例子中。SecondActivity 的实例不是由您创建的,因此这是不可能的。
TA贡献1843条经验 获得超7个赞
不使用put extra和getExtra,可以通过Singleton类实现。
public class DataHolder {
private static final DataHolder instance = new DataHolder();
public static DataHolder getInstance() {
return instance;
}
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
现在您可以设置数据并获取其他类中的数据。这里我没有使用任何其他 android 提供的 api,例如 Preference 或 intent 组件来传递和获取数据。
public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.first_text);
button = findViewById(R.id.button);
textView.setText("Hello Test");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataHolder.getInstance().setData(textView.getText().toString());
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}
public class SecondActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textView = findViewById(R.id.textView_2);
textView.setText(DataHolder.getInstance().getData());
}
}
TA贡献1796条经验 获得超7个赞
不,不可能通过接口在活动之间传递数据。
这样做的原因是,要使用接口,接口对象必须像我们在 onAttach() 方法中在两个片段之间传递数据时所做的那样被初始化。
但是在 Activity 的情况下,不能传递上下文来初始化。
class MainActivity extends AppCompatActivity implements myInterface {
onCreate(){
android.support.v4.app.FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
if (fragment != null) {
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(fragmentTag);
fragmentTransaction.commit();
}
}
@Override
public void onChange(String s) {
// your retrieved code
}
}
class MyFragment extends Fragment {
private MyInterface interf ;
@Override
public void onAttach(Context context) {
super.onAttach(context);
interf = (myInterface) context;
}
onActivityCreated(){
interf.onChange("Hello");
}
}
public interface myInterface {
void onChange();
}
TA贡献1816条经验 获得超6个赞
你应该在意图上使用额外的东西,它会更有效率。从 MainActivity 传递数据:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("TEXT_TO_PASS", "Hello Test");
startActivity(intent);
然后从 SecondActivity 检索它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String dataPassed = getIntent().getStringExtra("TEXT_TO_PASS");
}
添加回答
举报