2017-08-10 55 views
0

所以有3个活动A,B和C. 从活动A开始,我在活动B中进行活动B,执行一些任务并我从活动B去活动C.有3个活动A,B和C,更新A中的文字C

我活动C,我有一个按钮和一些数据,当我点击按钮时,我应该更新活动A中的文本。有没有最好的方法来做到这一点?

编辑:我不想回去,当我点击活动C中的按钮,但应该更新活动a中的文本,稍后当我到达活动时,我应该看到更改。

+0

只需创建一个活动内的方法,并呼吁在活动c按钮点击的方法,如果你想我可以添加详细的答案。 –

+0

嘿@BrunoFerreira感谢您的回复,但我得到一个空指针异常,当我尝试从Activity C调用该方法时,我是否需要在活动c中拥有活动A上下文? – Srini

+0

我不知道你的方法,但该方法有一个名为上下文的参数? –

回答

0

2路

  1. 当你离开活性C和去活性的

    ,从活动C中的值传递给一个就像你去一个新的活动。然后设置文本视图。

  2. 从活动与您从一个活动带到活动C.

+0

我不想从活动c返回,但我只想更新活动c中的活动a,只要我达到活动a,就应该看到更新的文本。 – Srini

+0

尝试第二种方法。 –

+0

谢谢你的帮助,但我不想找到这样的解决方案。我想通过使用LocalBroadcastManagar来做到这一点。感谢您的帮助。 – Srini

1

我觉得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

相关问题