初学Android,使用Bundle在Activity间交换数据(九)

在上一篇里面写了Activity之间的传值,这一篇里面写写怎么启动一个新的Activity之后,得到它的返回值

获得返回值需要重写当前Activity的onActivityResult(int requestCode,int resultCode,Intent intent),requestCode代表请求码,而resultCode代表结果码

下面是一个例子,点击按钮,弹出城市选择框,选中的城市返回显示到文本框上


界面xml如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/bn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="选择您所在的城市" />

            <EditText
                android:id="@+id/city"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:ems="10" android:width="180dp">

                <requestFocus />
            </EditText>

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>
    </TableLayout>

</LinearLayout>

代码如下,重点是onActivityResult方法

package WangLi.Activity.ActivityForResult;

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

public class ActivityForResult extends Activity {
	Button bn;
	EditText city;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取界面上的组件
        bn = (Button)findViewById(R.id.bn);
        city = (EditText)findViewById(R.id.city);
        bn.setOnClickListener(new OnClickListener(){
        	public void onClick(View source)
        	{
        		//创建需要对应于目标Activity的Intent
        		Intent intent = new Intent(ActivityForResult.this,SelectCityActivity.class);
        		//启动指定Activity并等待返回结果,其中0是请求码,用于标识该请求
        		startActivityForResult(intent,0);
        	}
        });
    }
    @Override
    public void onActivityResult(int requestCode,int resultCode,Intent intent)
    {
    	//当requestCode,resultCode同时为0时,也就是处理特定的结果
    	if(requestCode == 0 && resultCode == 0)
    	{
    		//取出Intent里的数据
    		Bundle data = intent.getExtras();
    		//取出Bundle中的数据
    		String resultCity = data.getString("city");
    		//修改city文本框
    		city.setText(resultCity);
    	}
    }
}
点击后出现选择城市的窗口,界面全部是动态生成,没有xml文件

选中后,此窗口关闭,回到第一个窗口,显示所选的城市

选择城市代码窗口如下

package WangLi.Activity.ActivityForResult;

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.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SelectCityActivity extends ExpandableListActivity {
     //定义省份数组
	 private String[] provinces = new String[]
			 {"广东","广西","湖南"};
	 private String[][] cities = new String[][]
	 {
			 {"广州","深圳","珠海","中山"},
			 {"桂林","柳州","南宁","北海"},
			 {"长沙","岳阳","衡阳","株洲"}
	 };
	 
	 public void onCreate(Bundle saveInstanceState)
	 {
		 super.onCreate(saveInstanceState);
		 ExpandableListAdapter adapter = new BaseExpandableListAdapter()
		 {
			//获取指定组位置,指定子列表项处的子列表项数据
			public Object getChild(int groupPosition,int childPosition)
			{
				return cities[groupPosition][childPosition];
			}
			public long getChildId(int groupPosition,int childPosition)
			{
				return childPosition;
			}
			public int getChildrenCount(int groupPosition)
			{
				return cities[groupPosition].length;
			}
			private TextView getTextView()
			{
				AbsListView.LayoutParams lp = 
						new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,64);
				TextView textView = new TextView(SelectCityActivity.this);
				textView.setLayoutParams(lp);
				textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
				textView.setPadding(36, 0, 0, 0);
				textView.setTextSize(20);
				return textView;
			}
			public View getChildView(int groupPosition,int childPosition,boolean isLastChild,
					View convertView,ViewGroup parent)
			{
				TextView textView = getTextView();
				textView.setText(getChild(groupPosition,childPosition).toString());
				return textView;
			}
			public Object getGroup(int groupPosition)
			{
				return provinces[groupPosition];
			}
			public int getGroupCount()
			{
				return provinces.length;
			}
			public long getGroupId(int groupPosition)
			{
				return groupPosition;
			}
			public View getGroupView(int groupPosition,boolean isExpanded,
					View convertView,ViewGroup parent)
			{
				LinearLayout l1 = new LinearLayout(SelectCityActivity.this);
				l1.setOrientation(0);
				ImageView logo = new ImageView(SelectCityActivity.this);
				l1.addView(logo);
				TextView textView = getTextView();
				textView.setText(getGroup(groupPosition).toString());
				l1.addView(textView);
				return l1;
			}
			public boolean isChildSelectable(int groupPosition,int childPosition)
			{
				return true;
			}
			public boolean hasStableIds()
			{
				return true;
			}
		 };
			//设置窗口显示列表
		setListAdapter(adapter);
		getExpandableListView().setOnChildClickListener(new OnChildClickListener()
		{
		    public boolean onChildClick(ExpandableListView parent,View source,
			    int groupPosition,int childPosition,long id)
		    {
			    //获取启动该Activity之前的Activity对应的Intent
			    Intent intent = getIntent();
			    Bundle data = new Bundle();
			    data.putString("city", cities[groupPosition][childPosition]);
			    intent.putExtras(data);
			    //设置该SelectActivity的结果码,并设置结束之后退回的Activity
			    SelectCityActivity.this.setResult(0,intent);
			    //结束SelectActivity
			    SelectCityActivity.this.finish();
			    return false;
		    }
	    });
	 }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值