Activity 之间,linearout和Activity,Adapter和Activity之间的传值方式

1、Activity之间传值直接通过onActivityResult的方式进行回调

(1)Activity A发送数据的方法:

Intent intent=new Intent();
intent.setClass(MainBuildingActivity.this, CitySelectActivity.class);
startActivityForResult(intent,1001);

(2)Activity B接收数据和返回数据的方法

Intent intent = new Intent();
intent.putExtra("city",((SortModel)adapter.getItem(position)).getName());
setResult(1001,intent);
finish();

(3)Activity  A接收数据的方法

//第一个参数为请求码,即调用startActivityForResult()传递过去的值

//第二个参数为结果码,结果码用于标识返回数据来自哪个新Activity
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//得到新Activity关闭后返回的数据
if(requestCode==1001){
String result =data.getExtras().getString("city");
ToastUtil.showShort(SecondHouseListActivity.this,result);
}
}

好了第一种传递数据和接收数据的方法就大功告成了

2、通过广播的形式传递数据(只是提供一种方式,个人建议不要这样写)

(1)首先是注册广播功能,将该代码加载页面时直接进行注册

//注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("action.refreshperson");
registerReceiver(mRefreshBroadcastReceiver, intentFilter);

(2)A页面可正常跳转到Activity B页面

(3)Activity B获得的数据传递回Activity A

Intent intent = new Intent();
intent.setAction("action.refreshPerson");
sendBroadcast(intent);
finish();

(4)Activity A接收数据的方法

/*接收弹出框的广播,对广播进行监听刷新数据*/
private BroadcastReceiver mRefreshBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals("action.refreshperson")) {
                String a=intent.getStringExtra("result")
}
    }
};

3、通过接口的方式进行传递数据,适用于 Activity和Adapter之间的数据传递,也适用于Activity和Linearout之间传值。

(1)首先在adapter或者linearout中定义接口

private onMeanCallBack meanCallBack;
public interface onMeanCallBack {
//是在Activity中,执行接口时执行的方法,可获得传递的值
 void isDisMess(Intent intent);
}
public void setOnMeanCallBack(onMeanCallBack m) {
    this.meanCallBack = m;
}

//在adapter或者linearout中执行的传值内容
meanCallBack.isDisMess(intent);
在Activity中执行的方法
menuHeaderView = new BuildingScreenActivity(MainBuildingActivity.this,typeList);
//获得得到的值
menuHeaderView.setOnMeanCallBack(new BuildingScreenActivity.onMeanCallBack(){
    @Override
    public void isDisMess(Intent intent) {
        //类型
        listType= (List<SelectBean>) intent.getSerializableExtra("listType");
        gActivity.this,buildingType+"_"+condition);
    }
});

其中通过Bundle进行传值的方式:

Bundle bundle = new Bundle();  

bundle.putString("MyString", "test bundle"); 

取值: Bundle bundle = getIntent().getExtras();  /取出来的是个数组 String testBundleString = bundle.getString("MyString"); 

3、viewpager和fragment之间的传值 

1)首先在调用viewpager的activity中往fragment中传值:

Bundle bd = new Bundle();
Bean bean = new Bean();
bd.putSerializable("bean", bean);
Testfragment fg0 = Testfragment.newInstance(bd);

2)在Testfragment写newInstantce方法

    public static Testfragment newInstance(Bundle args) {
        Testfragment fragment_y0 = new Testfragment();
        fragment_y0.setArguments(args);
        return fragment_y0;
    }

3)在fragment获取值得方法

Bundle arg = getArguments();
Bean bean0 = (Bean) arg.getSerializable("bean");

4、viewpager和fragment的另一种传值方式

Fragment testFragment = new TestFragment();
Bundle bundle = new Bundle();
bundle.putString("test", ID);
testFragment.setArguments(bundle);

getFragmentManager().beginTransaction()
.replace(R.id.fragment_content, testFragment)
 .addToBackStack(null).commit();

B页面获取值方式

String test =getArguments().getString("test");

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值