用Builder封装Intent参数传递

本文介绍了一种在Android开发中改进Intent参数传递的方法。通过创建Builder类来封装intent的putExtra过程,使得启动Activity时的参数设置更加整洁和集中。作者分享了具体实现Builder基类和TestActivity的代码片段,提供了一种提高代码可读性的实践方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        android开发中经常要使用intent传递参数。之前使用intent向BActivity传递参数的时候,都是在BActivity类中声明几个常量用来当作key,在需要启动ActivBity的时候,向intent中putExtra(key, value),然后在BActivity中获取参数。这种方式用起来没什么问题,但是总觉得不舒服,因为启动BActivity的intent的参数的设置过程显得很松散。今天用Builder的方式对intent的参数设置进行了封装,代码看起来感觉要好一些。记录下来与大家分享。


        首先是Builder的抽象基类:

/**
 * Created by woookliu on 3/11/14.
 */
public abstract class BaseIntentBuilder {

    private Intent intent;

    public BaseIntentBuilder(Context context){
        this.intent = new Intent(context, getTargetClazz());
    }

    protected abstract Class<?> getTargetClazz();

    public Intent getIntent(){
        return this.intent;
    }
}

        很简单,对外提供getIntent()方法。

        下面是需要启动的TestActivity:

/**
 * Created by woookliu on 3/11/14.
 */
public class TestActivity extends Activity {

    private static final String EXTRA_INT_PARAM = "intParam";
    private static final String EXTRA_ARRAY_PARAM = "arrayParam";

    /**
     * IntentBuilder类,帮助生成intent实例
     */
    public static class IntentBuilder extends BaseIntentBuilder {

        public IntentBuilder(Context context) {
            super(context);
        }

        @Override
        protected Class<?> getTargetClazz() {
            return TestActivity.class;
        }

        /**
         * 设置int类型参数
         * @param param
         * @return
         */
        public IntentBuilder setIntParam(int param) {
            super.getIntent().putExtra(EXTRA_INT_PARAM, param);
            return this;
        }

        /**
         * 设置int array类型参数
         * @param paramArray
         * @return
         */
        public IntentBuilder setArrayParam(int[] paramArray) {
            super.getIntent().putExtra(EXTRA_ARRAY_PARAM, paramArray);
            return this;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //取出intent中的参数
        int intParam = getIntent().getIntExtra(EXTRA_INT_PARAM, -1);
        int[] arrayParam = getIntent().getExtras().getIntArray(EXTRA_ARRAY_PARAM);

        Toast.makeText(this, "intParam:" + intParam + "\narrayParam:" + Arrays.toString(arrayParam), Toast.LENGTH_SHORT).show();
    }
}

        其中IntentBuilder类就是帮助生成intent实例的辅助类。

        在其他类中使用Builder传递参数:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new TestActivity.IntentBuilder(MainActivity.this)
                        .setIntParam(5)
                        .setArrayParam(new int[]{1, 2, 3})
                        .getIntent());
            }
        });
    }

}

        在别的地方生成包含参数的启动TestActivity的intent的时候,可以通过调用方法的形式添加参数。参数作用可以通过方法名比较清楚地传递,同时在编译阶段限制了参数类型。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值