作者givemepass (λ)
看板AndroidDev
标题Re: [问题] 两个Activity沟通
时间Tue Dec 20 22:16:03 2016
※ 引述《magic704226 (梅姬?没鸡?傻傻分不清楚)》之铭言:
: 目前有两个Activity
: A1 startActivity A2 後
: 还有资料要从 A1 -> A2
: 目前是用broadcast
: 有没有比较快的方法?
: 除了Android IPC binder实做?
Activity互相沟通可以透过以下方法
1. Intent
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("key", "value");
intent.putExtras(bundle);
intent.setClass(A.this, B.class);
startActivity(intent);
2. Broadcast
registerReceiver(mBroadcast, new IntentFilter(MY_MESSAGE));
Intent intent = new Intent();
intent.setAction(MY_MESSAGE);
sendBroadcast(intent);
3. Listener
public interface OnEventCompletedListener{
void onCompleted(String result);
}
public void setOnEventCompletedListener(OnEventCompletedListener listener){
mOnEventCompletedListener = listener;
}
private OnEventCompletedListener mOnEventCompletedListener;
public void notifyData(String result){
if(mOnEventCompletedListener != null){
mOnEventCompletedListener.onCompleted(result);
}
}
4. Application
public class MyApplication extends Application{
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApplication)getApplication()).getStr();
}
}
5. singleton
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
6. EventBus
A Activity
MyEvent event = new MyEvent();
event.setMyEventString(editText.getText().toString());
mEventBus.post(event);
B Activity
public void onEventMainThread(MyEvent event){
event.getMyEventString();
}
靠印象打的 没有编译过 应该会有错
大guy4这几个方法
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.149.7
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1482243371.A.915.html
1F:→ ssccg: listener还是要传listener物件的参考,没有解决问题吧 12/21 09:13
2F:→ ssccg: 另外後三个方法限同个app(process),前两个同样是Intent有 12/21 09:17
3F:→ ssccg: 资料大小限制 12/21 09:17
4F:→ givemepass: listener传递物件有什麽问题?@@ 12/21 11:16
5F:→ givemepass: activity传到activity是同app 没错 原文有要跨行程? 12/21 11:16
6F:→ givemepass: intent有大小限制也没错 原文有限定大小? 12/21 11:16
7F:→ ssccg: 原文也没说没有啊,acitivity怎麽不能传别的app的activity? 12/21 13:09
8F:→ ssccg: listener传递物件,假设a b两个activity好了,要先呼叫b的 12/21 13:10
9F:→ ssccg: setListener,这时候a要怎麽把listener这物件传给b? 12/21 13:11
10F:→ ssccg: 不就又回到一开始要怎麽把物件从a传到b的问题 12/21 13:11
11F:→ givemepass: 原文不是说要startactivity 12/21 16:51
12F:→ givemepass: 为什麽要解读成跨行程@@? 12/21 16:51
13F:→ givemepass: listener可以搭配singleton来完成 也可以做成全域方法 12/21 16:51
14F:→ givemepass: 很多种阿XD 12/21 16:51
15F:→ ssccg: 那不就是要搭配别种方法,就不算这个问题的解法啊 12/21 21:04
16F:→ ssccg: 有办法传listener物件,就有办法直接传要传的东西 12/21 21:06
17F:→ ssccg: startactivity可以start别的app的acitivty啊 12/21 21:07
18F:→ ssccg: 原po还提到了IPC binder,我才觉得怎麽能解读成一定不是IPC 12/21 21:07
19F:→ ssccg: 不要说别的app,同app的acitivity也能开在不同process 12/21 21:10
20F:→ ssccg: 也不是说那些方法不对(除了listener外),只是提些限制而已 12/21 21:23
21F:推 magic704226: 感谢两位都是帮小弟解决问题,目前仅限於同一个 12/22 15:09
22F:→ magic704226: package,我没说清楚,是我的疏忽 12/22 15:09
23F:→ Killercat: 另外要互传其实用service会不会简单一点..... 12/26 14:26
24F:推 siriusu: 推,也推厘清 12/31 07:14