안드로이드 학습의 다섯 가지 인터페이스 통신 방법 총결

인터페이스 통신은 모두가 매우 익숙하다고 믿습니다. 최근에 업무 중에도 각양각색의 인터페이스 통신 문제에 부딪혔습니다. 오늘은 이것을 총괄합니다!
인터페이스 통신은 바로Activity 간의 데이터 전달이다(Fragment도Activity에 속한다)
통신 방법 1: startActivity()
    public void toBindActivity(Activity act, Bundle bundle) {
        startActivity(act, BindActivity.class, bundle);
    }

점프와 동시에 값을 전달합니다
수신:
int position = getIntent().getExtras().getInt("position");

통신 방법 2:public 만들기 방법
public UserModel getUserInfo(){
        return usermodel;
    }

수신:
UserModel model=new MainActivity().getUserInfo();

통신 방법 3: 콜백 인터페이스
인터페이스 생성
public interface FragmentCallBack {
    ThirdModel getThirdModel();
}

실현 인터페이스
public class BindActivity extends BaseActivity implements FragmentCallBack {
 @Override
    public ThirdModel getThirdModel() {
        return thirdModel;
    }
}

수신:
 private ThirdModel thirdModel;
 private FragmentCallBack callBack;

  @Override
    protected void initData() {
        thirdModel = callBack.getThirdModel();

 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        callBack = (BindActivity) activity;

    }

통신 방식 4: 방송 통신 실현
방송의 등록은 동태와 정태 두 종류로 나뉘는데 구체적인 등록은 소개되지 않는다.
public class DemoReceiver extends BroadcastReceiver {
    private LogUtil log = new LogUtil(getClass());

    @Override
    public void onReceive(Context context, Intent intent) {
        //      
        if (intent.getAction().equals("") {
          Intent intents=new Intent(context, MainActivity.class);
            Bundle bundle=new Bundle();
            bundle.putSerializable("key","value");
            intents.putExtras(bundle);
            context.startActivity(intents);
        }
    }
}

수신:
int position = getIntent().getExtras().getInt("position");

통신 방법 5: EventBus 통신
EventBus 등록 제거는 설명에 포함되지 않습니다.
보내기:
EventBus.getDefault().post(new ClickEvent(ClickEvent.Type.MOVE_LOGIN, null, 3));

ClickEvent
public class ClickEvent {
    public enum Type {}
    public Type type;
    public View view;
    public Object data;

    public ClickEvent(Type type, View view, Object data) {
        this.type = type;
        this.view = view;
        this.data = data;
    }

접수
  @Override
    public void onEventMainThread(final ClickEvent event) {
        switch (event.type) {
            case RECOMMEND_NEWS:
            case LOGINOUT:
                getWindow().getDecorView().post(new Runnable() {
                    @Override
                    public void run() {
                        adapter.selectTab((Integer) event.data);
                    }
                });
                break;
            case MOVE_LOGIN:
                RouteManager.getInstance().toLogin(this, (Integer) event.data);
                finish();
                break;
        }
    }

참고: EventBus 통신은 활동이 스택에 이미 존재해야 합니다. 그렇지 않으면 수신되지 않으며, EventBus는 어댑터에서 활동과 통신할 수 있습니다.

좋은 웹페이지 즐겨찾기