现在的位置: 首页 > 综合 > 正文

activity之间参数传递

2013年05月09日 ⁄ 综合 ⁄ 共 4400字 ⁄ 字号 评论关闭

         这一节介绍一下activity之间参数传递。我们知道用intent可以实现activity之间相互跳转,在跳转的同时我们不免也需要传递一些参数,下面就介绍一下如何在一个activity里传递参数,在另一个activity里接受参数。

           activity之间有两种参数传递形式:一种是一个activity启动另一个activity的时候传递数据到另一个activity,然后在activity中接受到数据,做相应处理。另一种是一个activity启动另个一activity传递数据,当另个一activity窗口关闭后,在传递数据到启动它的那个activity。

          我们先看一下第一种方式

         首先先建立一个ActivityDemo项目:

     

public class MainDemoActivity extends Activity {
   private Button button1,button2;
	 @Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		button1=(Button) this.findViewById(R.id.button1);
		button2=(Button) this.findViewById(R.id.button2);
		
		button1.setOnClickListener(new MyListener());
		button2.setOnClickListener(new MyListener());
	}
	 private class MyListener implements View.OnClickListener{

		public void onClick(View v) {
			// TODO Auto-generated method stub
			Intent intent=new Intent();
			if(v==button1){
			 intent.setClass(MainDemoActivity.this, FirstDemoActivity.class);
			}else if(v==button2){
			 intent.setClass(MainDemoActivity.this, ResultDemoActivity.class);
			}
			startActivity(intent);
		}
		 
	 }
}

   接着给出main.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" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="传递参数不得到返回值" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="传递参数得到返回值" />
  
</LinearLayout>

    看一下第一种是怎么传递参数的:

 

public class FirstDemoActivity extends Activity {
   private Button button3;
   private EditText editText;
	 @Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.first);
		
		button3=(Button) this.findViewById(R.id.button3);
		editText=(EditText) this.findViewById(R.id.editText1);
		button3.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String content=editText.getText().toString();
			  Intent intent=new Intent(FirstDemoActivity.this,SecondDemoActivity.class);
			  //可以把要传递的参数放到一个bundle里传递过去,bundle可以看做一个特殊的map.
			  Bundle bundle=new Bundle();
			  bundle.putString("result", "第一个activity的内容");
			  bundle.putString("content",content);
			  intent.putExtras(bundle);
			  //也可以用这种方式传递.
			  //intent.putExtra("result", "第一个activity的内容");
			  
			  startActivity(intent);
			}
		});
	}
}

  

      看一下在SecondDemoActivity中怎么接受参数:
   

public class SecondDemoActivity extends Activity {
    private TextView textView;
	 @Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);
		
		textView=(TextView) this.findViewById(R.id.textView3);
		Intent intent=getIntent();
		String result=intent.getStringExtra("result");
		String content=intent.getStringExtra("content");
		textView.setText(result+" : "+content);
	}
}

   
      启动,看一下运行效果:

    

     点击发送按钮:

   

      OK!  成功。

      接下来看看第二种方式:

    先看一下页面的布局文件:

  

<?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" >

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

     核心代码:

  

public class ResultDemoActivity extends Activity {
    /** Called when the activity is first created. */
	private TextView text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        
        text=(TextView)this.findViewById(R.id.text);
        pickContact();
    }
    private void pickContact(){
    	Intent intent=new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
    	  //在这里也可以传递一些参数
    	//intent.putExtra(name, value)
    	//第二个参数就是onActivityResult 里得第一个参数。
    	startActivityForResult(intent,1);
    }

	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	// TODO Auto-generated method stub
    	if(resultCode==Activity.RESULT_OK && requestCode==1){
    		Cursor cusor=this.getContentResolver()
    			.query(data.getData(), new String[]{ContactsContract.Contacts.DISPLAY_NAME},
    					null, null, null);
    		if(cusor.moveToFirst()){
    			String str=cusor.getString(cusor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    			text.setText(str);
    		}
    	}
    }
}

   代码我想大家都看的懂吧!不懂得看我以前的使用Content Provider得到联系人信息这一节

    看一下运行效果:

   

  

    这是我通讯录的联系人。点击listview:

   

    

    返回到了ResultDemoActivity并得到了联系人的名字。

抱歉!评论已关闭.