天天看点

Android: 用Intent实现Activity之间数据传递

程序功能:

使用Intent传递数据、跳转Activity。两个Activity组件,Activity1中包含一个TextView和一个Button。当点击Button时,可以启动Activity2对当前TextView中的内容进行编辑。Activity2的布局界面除了编辑TextView文本信息的编辑框外,还包含两个按钮“保存”和“放弃”。当单击“保存”,Activity2中编辑的文本将返回Activity1,并更新到Activity1中的TextView中;单击“放弃”也将返回Activity1,但之前的编辑操作将被放弃。

MainActivity.java

package org.hq.testIntent;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {	
        private String msg = "";
        private EditText editText = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                editText = (EditText)super.findViewById(R.id.edittext);
                editText.setEnabled(false);    //设置编辑框不可编辑
                Button send_btn = (Button)super.findViewById(R.id.send_btn);
                send_btn.setOnClickListener( (OnClickListener) new OnClickListenerImpl() );   
        }

        private class OnClickListenerImpl implements OnClickListener //实现OnClickListener类
        {
                @Override
                public void onClick(View v)  
                {
                        Intent intent = new Intent(); 
                        msg = editText.getText().toString(); //获取编辑框中字符串
                        intent.putExtra("org.hq.testIntent.msg", msg); //向下一个Activity发送编辑框中的字符串,初始化时字符串为空
                        intent.setClass(MainActivity.this, EditActivity.class);
                        startActivityForResult(intent,100);//启动下一个Activity,设置一个请求值100
                }
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.activity_main, menu);
                return true;
        }
        
        @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data)
    {
    	super.onActivityResult(requestCode, resultCode, data);
    	if(requestCode==100)  //如果一个返回的Activity的请求值为100,说明是本Activity是调用者
    	{
        EditText tv = (EditText)findViewById(R.id.edittext);
    		String msg = "";
    		if ( 20 == resultCode ) //如果子Activity返回值为20,说明点击了保存按钮
    		{
    			msg = data.getStringExtra("org.hq.testIntent.msg"); //获取字符串
    			tv.setText(msg);   //更改编辑框的内容
    		}
    	}
    }
}

           

EditActivity.java

package org.hq.testIntent;

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

public class EditActivity extends Activity{
	private String msg = null;
	private  EditText et = null;
	private  Intent intent = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_edit);
		intent = getIntent();
		if ( null != intent )
		{
			msg = intent.getStringExtra("org.hq.testIntent.msg"); //获取父Activity传来的字符串
		}
		et = (EditText)super.findViewById(R.id.edittext);   //事实上这个程序中两个Activity并不一定要共享同一个编辑框
		et.setEnabled(true);  //设置编辑框可读
		et.setText(msg);      //设置字串内容
		Button ok_btn = (Button)super.findViewById(R.id.ok_btn);  //获取确认按钮
		Button return_btn = (Button)super.findViewById(R.id.return_btn); //获取返回按钮
		ok_btn.setOnClickListener( (OnClickListener) new OkOnClickListenerImpl() ); 
		return_btn.setOnClickListener( (OnClickListener) new ReturnOnClickListenerImpl());
	}
	
	
	private class ReturnOnClickListenerImpl implements OnClickListener //实现OnClickListener类
	{
		@Override
		public void onClick(View v)  
		{
			Intent intent = new Intent();
			setResult(30,intent);  //点击取消,不返回数据    
			finish(); //本次Activity结束,表面上是两个Activity交互,实际上子Activity返回后它的生命周期已经结束了,再次调用是新生成的Activity
		}
	}
	
	private class OkOnClickListenerImpl implements OnClickListener //实现OnClickListener类
	{
		@Override
		public void onClick(View v)  
		{
			Intent intent = new Intent();
			msg = et.getText().toString(); //获取编辑框中的字符串
			intent.putExtra("org.hq.testIntent.msg", msg); //向下一个Activity发送数据
			setResult(20,intent);      
			finish();    //本次Activity结束,表面上是两个Activity交互,实际上子Activity返回后它的生命周期已经结束了,再次调用是新生成的Activity
		}
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_edit, menu);
		return true;
	}
	
}
           

运行结果:

Android: 用Intent实现Activity之间数据传递

跳转:

Android: 用Intent实现Activity之间数据传递

编辑后保存:

Android: 用Intent实现Activity之间数据传递