所以有3个活动A,B和C. 从活动A开始,我在活动B中进行活动B,执行一些任务并我从活动B去活动C.有3个活动A,B和C,更新A中的文字C
我活动C,我有一个按钮和一些数据,当我点击按钮时,我应该更新活动A中的文本。有没有最好的方法来做到这一点?
编辑:我不想回去,当我点击活动C中的按钮,但应该更新活动a中的文本,稍后当我到达活动时,我应该看到更改。
所以有3个活动A,B和C. 从活动A开始,我在活动B中进行活动B,执行一些任务并我从活动B去活动C.有3个活动A,B和C,更新A中的文字C
我活动C,我有一个按钮和一些数据,当我点击按钮时,我应该更新活动A中的文本。有没有最好的方法来做到这一点?
编辑:我不想回去,当我点击活动C中的按钮,但应该更新活动a中的文本,稍后当我到达活动时,我应该看到更改。
我觉得TextView的对象传递你的TextView对象的活动B,然后活动B到C.活动在活动Ç只是正常的setText ,您应该创建一个单独的类,您将在活动A,B和C之间共享该类。该类应该有一个字段,它将在活动A中存储TextView的文本。并且有一个使用Observer模式的良好变体(rxJava或自定义决定)。
示例: SharedStateModel用于保存ActivityA的状态。 这个决定不是很清楚,因为它打破了依赖倒置规则,所以我建议你使用Dagger 2将SharedStateModel注入到ActivityA和ActivityC中,并像我在注释中描述的那样管理它的组件生命周期到SharedStateModeClass。
/*
Let's make that state-class a local singleton - you create it in onCreate of ActivityA and
further it can be destroyed in onDestroy of ActivityA.
*/
public class SharedStateModel {
private PublishSubject<String> stateListener = PublishSubject.create();
private String viewState;
private static SharedStateModel instance;
private SharedStateModel() {
}
public void setViewState(String viewState) {
this.viewState = viewState;
stateListener.onNext(viewState);
}
public PublishSubject<String> getStateListener() {
return stateListener;
}
public void destroyViewState() {
instance = null;
}
public static SharedStateModel getInstance() {
if (instance != null) {
return instance;
} else {
instance = new SharedStateModel();
return instance;
}
}
}
public class ActivityA extends AppCompatActivity {
@BindView(R.id.textView)
private TextView textView;
private SharedStateModel sharedStateModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
sharedStateModel = SharedStateModel.getInstance();
sharedStateModel.getStateListener().subscribe(
textViewState -> textView.setText(textViewState));
}
@Override
protected void onDestroy() {
super.onDestroy();
sharedStateModel.destroyViewState();
}
}
public class ActivityC extends AppCompatActivity {
@BindView(R.id.button)
private Button button;
/*
Let's assume that you want to send a message from EditText in ActivityC
*/
@BindView(R.id.editText)
private EditText editText;
private SharedStateModel sharedStateModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
sharedStateModel = SharedStateModel.getInstance();
button.setOnClickListener(view -> sharedStateModel.setViewState(
String.valueOf(editText.getText().toString())));
}
}
而且我想推荐你good guides from Eugene Matsyuk如果您想了解匕首2
只需创建一个活动内的方法,并呼吁在活动c按钮点击的方法,如果你想我可以添加详细的答案。 –
嘿@BrunoFerreira感谢您的回复,但我得到一个空指针异常,当我尝试从Activity C调用该方法时,我是否需要在活动c中拥有活动A上下文? – Srini
我不知道你的方法,但该方法有一个名为上下文的参数? –