隐式Intent启动Activity,action不能使用@string配置

Activity配置:

<activity
            android:name=".activity.NoteInfoActivity"
            android:label="@string/title_activity_note_info"
             android:theme="@android:style/Theme.Light.NoTitleBar"
             >
            <intent-filter >
                <action android:name="@string/NoteInfo"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

则,当使用Java代码隐式启动该Activity:

      Intent intent = new Intent();
        intent.setAction(getString(R.string.NoteInfo));
        intent.putExtra(Contast.OBJ_NOTEPATE, notepad);
        startActivity(intent);

抛出异常:

AndroidRuntime(18397): Android.content.ActivityNotFoundException: 
No Activity found to handle Intent {{act=@string/cn.com.lu.yuejiben.NoteInfo (has extras) }

异常显示:系统没有找到接收action为@string/cn.com.lu.yuejiben.NoteInfo的Activity,原因是配置Activity的action时,使用了@string的写法。然后不知为何,android就抽风了,可能是解析xml和String文件产生问题,导致Action对不上,于是,无法启动Activity。

而即使java代码写出如下形式:

Intent intent = new Intent();
        intent.setAction("@string/NoteInfo");
        intent.putExtra(Contast.OBJ_NOTEPATE, notepad);
        startActivity(intent);

或如下形式也不会成功:

Intent intent = new Intent();
        intent.setAction("@string/cn.com.lu.yuejiben.action.NoteInfo");
        intent.putExtra(Contast.OBJ_NOTEPATE, notepad);
        startActivity(intent);

于是,我只能呵呵。。。果然抽风了。。。。

好的,这里是一个使用隐式intent启动Activity完成数据传递和结果返回的样例代码: 在调用方Activity中: ``` // 创建一个用于传递数据的Bundle对象 Bundle data = new Bundle(); data.putString("name", "John"); data.putInt("age", 25); // 创建一个intent对象,设置action和category Intent intent = new Intent(); intent.setAction("com.example.ACTION_VIEW"); intent.addCategory("android.intent.category.DEFAULT"); // 将数据附加到intentintent.putExtras(data); // 启动目标Activity并等待返回结果 startActivityForResult(intent, 1); ``` 在目标Activity中: ``` // 从intent中获取传递的数据 String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0); // 创建一个用于返回结果的intent对象 Intent resultIntent = new Intent(); resultIntent.putExtra("result", "success"); // 将结果设置到intent中并返回 setResult(Activity.RESULT_OK, resultIntent); finish(); ``` 在调用方Activity中获取返回结果: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == Activity.RESULT_OK) { String result = data.getStringExtra("result"); Toast.makeText(this, "Result: " + result, Toast.LENGTH_SHORT).show(); } } ``` 以上代码用于启动一个名为"com.example.ACTION_VIEW"的Activity,将数据"name"和"age"传递到目标Activity中,并等待目标Activity返回结果。在目标Activity中,获取传递的数据并设置返回结果。最后,在调用方Activity中获取返回结果并显示一个Toast提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值