4 回答

TA貢獻1801條經驗 獲得超16個贊
在類上實現接口并不意味著它會自動獲得調用。
例如,如果 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");
}
添加回答
舉報