android 启动活动传递参数的最佳写法

来源:互联网 发布:淘宝店能卖图片吗 编辑:程序博客网 时间:2024/04/29 03:34

有时候我们接手别人的项目,看到getIntent().getExtras()的方法而感到头疼,因为不知道对方什么时候把参数保存起来的。这篇博客主要针对这个问题对intent进行了封装。废话不多说,直接上代码。

package com.example.wmk.utils;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;/** * Created by 老王 on 2017/1/12. */public class IntentUtils {    /**     * @param context        上下文     * @param targetActivity 跳转的下一个Activity     * @param bundle     * @param isFinish       是否关闭当前页面     */    public static void intent(Context context, Class<? extends Activity> targetActivity, Bundle bundle, boolean isFinish) {        Intent i = new Intent(context, targetActivity);        if (bundle != null) {            i.putExtras(bundle);        }        context.startActivity(i);        if (isFinish) {            ((Activity) context).finish();        }    }}
上面这个工具类,主要是对意图进行封装,第三个参数Bundle就是这篇博客主要讲解的地方。我在主界面Fragment页面进行了一个页面跳转,代码非常简单,如下:

/** * 食堂监听事件 */private void initCanteenEvents() {    View.OnClickListener onClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            switch (v.getId()) {                case R.id.ll_homeCanteenFirst:                    IntentUtils.intent(getActivity(), CanteenFirstActivity.class, CanteenFirstActivity.putDataToIntent(), false);                    break;            }        }    };    llHomeCanteenFirst.setOnClickListener(onClickListener);}
上面的代码,主要就是一个OnClickListener的监听事件,没啥好多说的。主要看CanteenFirstActivity.putDataToIntent()这行代码,如下图3,所示。

2和3写在一起,避免了在2中到处找3的目的。上述图片发现看的不是很清楚,看官可以查看下面代码,再抽取上面图片的内容。

package com.example.wmk.activity.canteenActivity;import android.content.Intent;import android.os.Bundle;import android.support.v4.widget.SwipeRefreshLayout;import android.view.KeyEvent;import android.widget.ListView;import android.widget.Toast;import com.example.wmk.R;import com.example.wmk.activity.MainActivity;import com.example.wmk.activity.baseActivity.BaseActivity;import com.example.wmk.adapter.OPAdapter;import com.example.wmk.bean.OPBean;import com.example.wmk.connector.OnClickDialogItemListener;import com.example.wmk.constant.Constant;import com.example.wmk.db.DBUtils;import com.example.wmk.utils.DialogUtils;import com.example.wmk.utils.IntentUtils;import com.lidroid.xutils.exception.DbException;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.Unbinder;import static com.example.wmk.constant.Constant.F0;/** * 一食堂(listView的使用) */public class CanteenFirstActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener {    @BindView(R.id.swipeRefresh_canteen_first)    SwipeRefreshLayout swipeRefreshCanteenFirst;    @BindView(R.id.lstView_canteen_first)    ListView lstViewCanteenFirst;    private List<OPBean> lstOPBean;    private List<OPBean> opBeanList;    private OPAdapter adapter;    private int index = 0;    private boolean isRefresh = true;    private Unbinder unbinder;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_canteen_first);        unbinder = ButterKnife.bind(this);        try {            lstOPBean = DBUtils.getInstance(this).findAll(OPBean.class);        } catch (DbException e) {            e.printStackTrace();        }        opBeanList = getDataFromIntent();        super.initSwipeRefreshLayout(this, swipeRefreshCanteenFirst);        initListView();    }    public List<OPBean> getDataFromIntent() {        List<OPBean> opBeenList = new ArrayList<>();        Intent intents = getIntent();        if (intents != null) {            Bundle bundle = intents.getExtras();            if (bundle != null) {                opBeenList.add((OPBean) bundle.getParcelable(Constant.LF));                opBeenList.add((OPBean) bundle.getParcelable(Constant.SL));                opBeenList.add((OPBean) bundle.getParcelable(Constant.WSP));            }        }        return opBeenList;    }    public static Bundle putDataToIntent() {        Bundle bundle = new Bundle();        bundle.putParcelable(Constant.LF, new OPBean("路飞", "assets://image/xp01.png", "船长,成为海贼王的男人", "$500,000,000-"));        bundle.putParcelable(Constant.SL, new OPBean("索隆", "assets://image/xp02.png", "副船长,世界第一的大剑豪", "$320,000,000-"));        bundle.putParcelable(Constant.WSP, new OPBean("乌索普", "assets://image/xp03.png", "大骗子,勇敢的海上战士", "$200,000,000-"));        return bundle;    }    /**     * 初始化ListView     */    private void initListView() {        adapter = new OPAdapter(this);        notifyDataSetChanged(lstOPBean);        lstViewCanteenFirst.setAdapter(adapter);    }    /**     * 刷新列表     */    public void notifyDataSetChanged(List<OPBean> datas) {        adapter.clear();        adapter.setDatas(datas);        adapter.notifyDataSetChanged();    }    @Override    public void onRefresh() {        if (opBeanList != null) {            if (index < opBeanList.size()) {                lstOPBean.add(opBeanList.get(index));            } else {                isRefresh = false;                Toast.makeText(this, "没有更多的数据", Toast.LENGTH_SHORT).show();                //停止刷新                swipeRefreshCanteenFirst.setRefreshing(false);            }        }        if (isRefresh) {            new Thread(new Runnable() {                @Override                public void run() {                    try {                        Thread.sleep(2000);                        mHandler.post(new Runnable() {                            @Override                            public void run() {                                notifyDataSetChanged(lstOPBean);                                swipeRefreshCanteenFirst.setRefreshing(false);                                index++;                            }                        });                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }).start();        }    }    @Override    protected void onDestroy() {        super.onDestroy();        unbinder.unbind();    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        switch (keyCode) {            case KeyEvent.KEYCODE_BACK:                DialogUtils.dialogCommon(this, getStr(R.string.quit), new OnClickDialogItemListener() {                    @Override                    public void onClick(int flag) {                        switch (flag) {                            case F0:                                IntentUtils.intent(CanteenFirstActivity.this, MainActivity.class, null, true);                                break;                        }                    }                });                break;        }        return super.onKeyDown(keyCode, event);    }}


1 0
原创粉丝点击