启动其他 Activity并返回数据

我们总有千万个借口去远方,远方救得了你吗。这个时代,旅行的意义被过于夸大。跟心上人有摩擦了,跟上司有矛盾了,最后大家都背起背包汇入旅途。在生活一团糟的情况下,旅行是为了缓一缓,回去重新处理烂摊子


Activity 还提供了一个startActivityForResult(Intent intent,int requestCode)方法来启动其他的Activity. 该方法用于启动指定的Activity,并期望获取指定Activity返回的数据. 在这种情况下 也是可以通过 Bundle进行数据传递的.
为获取启动的Activity的数据.,需要从两步着手;
1. 当前Activity需要重写 onActivityResult(int requestCode,int resultCode,Intent,intent) 当被启动的Activity返回结果时,该方法会被触发,其中 requestCode 代表请求码, 而 resultCode 代表Activity返回的结果码,这个结果码也是由开发者根据业务逻辑自己设定的.
2. 被启动的Activity需要调用setResult();方法设置处理结果.


package com.test.startactivityforresult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
 * 使用第2个 Activity让用户选择 信息
 */
public class ActivityForResult extends Activity {
    Button btn;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_for_result);

        //初始化组件
        btn = (Button) findViewById(R.id.btn_city);
        editText = (EditText) findViewById(R.id.et_city);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(ActivityForResult.this, SelectCityActivity.class);

                //启动指定的Activity并等待返回结果 ,其中 100 是请求码 用于标识该请求
                startActivityForResult(intent, 100);

            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 100 && resultCode == 100) {
            //取出Intent里的 Extras 数据
            Bundle bundle = data.getExtras();

            //取出Bundle中 的数据
            String resultCity = bundle.getString("city");

            //修改 文本框的内容
            editText.setText(resultCity);
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.test.startactivityforresult.ActivityForResult">

    <Button
        android:id="@+id/btn_city"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选择城市" />

    <EditText
        android:id="@+id/et_city"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn_city" />
</RelativeLayout>

获取该Activity的数据信息

package com.test.startactivityforresult;

import android.app.ExpandableListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SelectCityActivity extends ExpandableListActivity {
/*

    //定义省份数组
    public String[] provinces = new String[]{"北京市(京)",
            "天津市(津)", "上海市(沪)", "重庆市(渝)",  "河北省(冀)", "河南省(豫)", "云南省(云)","辽宁省(辽)",
            "黑龙江省(黑)", "湖南省(湘)","安徽省(皖)", "山东省(鲁)", "新疆维吾尔(新)","江苏省(苏)","浙江省(浙)",
            "江西省(赣)", "湖北省(鄂)","广西壮族(桂)","甘肃省(甘)","山西省(晋)", "内蒙古(蒙)","陕西省(陕)",
            "吉林省(吉)","福建省(闽)", "贵州省(贵)","广东省(粤)","青海省(青)", "西藏(藏)", "四川省(川)",
            "宁夏回族(宁)", "海南省(琼)", "台湾省(台)","香港特别行政区","澳门特别行政区"};
*/

    public String[] provinces = new String[]{"广东省(粤)", "广西壮族(桂)", "湖南省(湘)"};

    private String[][] cities = new String[][]{
            {"广州", "深圳", "珠海", "中山"},
            {"桂林", "柳州", "南宁", "北海"},
            {"长沙", "岳阳", "衡阳", "株洲"}
    };

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

        ExpandableListAdapter adapter = new BaseExpandableListAdapter() {

            //1.获取指定组的位置 指定子列表处的子列表项数据
            @Override
            public Object getChild(int groupPosition, int childPosition) {
                return cities[groupPosition][childPosition];
            }

            //2 .
            @Override
            public long getChildId(int groupPosition, int childPosition) {
                return childPosition;
            }

            //3.
            @Override
            public int getChildrenCount(int groupPosition) {
                return cities[groupPosition].length;
            }

            //自定义 TextView
            private TextView getTextView() {

                AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 64);

                TextView textView = new TextView(SelectCityActivity.this);
                textView.setLayoutParams(lp);
                textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
                textView.setPadding(72, 0, 0, 0);
                textView.setTextSize(14);
                return textView;
            }
            // 4. 该方法返回每个子选项的 外观

            @Override
            public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
                TextView textView = getTextView();
                textView.setText(getChild(groupPosition, childPosition).toString());

                return textView;
            }


             获取指定组位置处 的组数据
            @Override
            public Object getGroup(int groupPosition) {
                return provinces[groupPosition];
            }

            @Override
            public int getGroupCount() {
                return provinces.length;
            }

            @Override
            public long getGroupId(int groupPosition) {
                return groupPosition;
            }

            //指定每个组选项的外观
            @Override
            public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

                LinearLayout ll = new LinearLayout(SelectCityActivity.this);
                ll.setOrientation(LinearLayout.HORIZONTAL);

                ImageView image = new ImageView(SelectCityActivity.this);
                ll.addView(image);

                TextView textView = getTextView();
                textView.setText(getGroup(groupPosition).toString());
                ll.addView(textView);

                return ll;
            }






            @Override
            public boolean hasStableIds() {
                return true;  //返回true
            }


            @Override
            public boolean isChildSelectable(int groupPosition, int childPosition) {
                return true; //返回true
            }
        };

        //设置窗口显示列表
        setListAdapter(adapter);

        getExpandableListView().setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

                 获取启动该Activity之前的Activity对应的Intent
                Intent intent = getIntent();
                intent.putExtra("city",cities[groupPosition][childPosition]);

                //设置 SelectCityActivity 的结果码
                SelectCityActivity.this.setResult(100,intent);

                SelectCityActivity.this.finish();

                return false;
            }
        });

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值