Emm*_*nce 2 android android-activity snackbar android-snackbar
当我在活动B中的回调完成时,如何在活动A(coordinatorLayout在这里)中显示snackbar ?Snackbar需要我的coordinatorLayout,但我无法从Activity B中提供它.
活动B:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home) {
this.finish();
return true;
} else if(id == R.id.action_add) {
callAddObject();
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public void callAddObject() {
[...]
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
// show snackbar in Activity A
}
@Override
public void onResponse(Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
// show snackbar in Activity A
}
});
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助.
您应该从活动A中打开活动B.
startActivityForResult(activityBIntent, FORM_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
然后在提交表单时,使用结果完成活动B.
@Override
public void onFailure(Request request, IOException e) {
Log.d(TAG, "onFailure: " + e.getMessage());
// You might not want to finish the activity here, instead, you can show an error here
}
@Override
public void onResponse(Response response) throws IOException {
Log.d(TAG, "onResponse: " + response.body().string());
setResult(FORM_SUBMITTED);
finish();
}
Run Code Online (Sandbox Code Playgroud)
并在活动A中对此作出反应
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
switch (requestCode) {
case FORM_REQUEST_CODE:
if (resultCode == ActivityB.FORM_SUBMITTED) {
Snackbar.make(mView, "Form submitted", Snackbar.LENGTH_SHORT).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是在IntentService中调用服务器,并在调用完成后使用某种事件总线(即Otto)向活动A发送事件.
归档时间: |
|
查看次数: |
4016 次 |
最近记录: |