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

有时候我们接手别人的项目,看到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);
    }
}


猜你喜欢

转载自blog.csdn.net/qq_21200053/article/details/54598415