• Activity之间的数据传递


    在Activity之间传递数据,主要的方法有四种:

    • 利用静态字段传递;

    • 利用Intent传递;

    • 利用ClipboardManager传递;

    • 利用全局变量传递。

        下面就一一道来,首先呢,创建一个Android Application Project,自取名DataTransfer,class为Main.java。要实现数据传递,至少要两个Activity,所以分别添加一个class——Other.java(继承自Activity),和一个layout文件——other.xml,并在AndroidManifest.xml中写入Other这个Activity。然后在main.xml中添加一个按钮Button,在other.xml中添加一个TextView,实现在点击Button时,跳转到Other,并显示传递的数据。(注:具体代码在最后给出)

    1.利用静态字段传递

        这种方法应该是最简单的一种了,利用每个Activity子类的公有静态字段传递,无论是当前Activity中的字段,还是要跳转到的Activity中的字段,都可以作为数据传递的载体。因为静态字段是类的对象所共有的,与具体实例无关,所以用该方法可以实现数据传递。具体实现是比较简单的,比如在Main和Other中各添加一个公有静态String字段,在响应按钮点击事件的方法中,分别将两个字段赋值,然后在TextView中显示出来就可以了。

    2.利用Intent传递

       这是比较通用的方法,因为在Activity之间跳转,就需要使用Intent来实现,意图就是来表明你要干什么。Intent对象中有一个putExtra方法,该方法大约有20多种重载,几乎包含了所有值类型和引用类型,几乎可以传递各种数据。另外,还有接收数据的方法,例如接收int数据,可以用getIntExtra方法。使用Intent传递就是在Main中使用putExtra方法使要传递的数据保存到内存中,然后在Other中使用相对应的方法来接收数据,并在TextView中显示出来。

    3.利用ClipboardManager传递

        该方法算是比较巧妙的一种,利用系统提供的剪切板的服务来实现的,将要传递的数据数据放到剪切板上,然后在剪切板上取相应的数据。在两个Activity中声明ClipboardManager的对象,在Main中使用该对象的setText方法传递,在Other中使用getText方法获得数据。

    4.利用全局变量传递

        该方法是指利用继承Application类保存全局变量来传递,SDK中对于该类的解释:Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created。通俗的说就是,在程序或包创建的时候,该类就随之建立了,因此,该类中的数据始终存在,对于所有的其他类来说,就相当于是全局变量,可以设置,也可以获取。该方法是比较好的一种,要使用该方法,首先新建一个类,并继承自Application,在里面添加字段。再使用Activity的getApplication方法来获得一个application对象,分别使用该对象的get和set方法传递和获取数据。

    具体代码实现:

    /*Main.java*/
    package com. example.transfer ;
    
    import com. example.transfer .R;
    
    import android. R.string ;
    import android. os.Bundle ;
    import android. app.Activity ;
    import android. content.ClipboardManager ;
    import android. content.Intent ;
    import android. view.Menu ;
    import android. view.View ;
    import android. widget.Button ;
    
    public class Main extends Activity {
    
         Button button;
         MyData myData;
          public static String major = "软件工程" ;
    
          @Override
          protected void onCreate( Bundle savedInstanceState) {
               super. onCreate(savedInstanceState );
               setContentView(R .layout. main);
               button = (Button ) this. findViewById(R .id. button);
               button.setOnClickListener (new View.OnClickListener() {
    
                   @Override
                   public void onClick( View v) {
                        // TODO 自动生成的方法存根
                        // 利用Intent使Activity跳转
                        // 可以直接使用构造方法实现;
                        // Intent intent = new Intent(Main.this, OtherActivity.class);
                        // 也可以使用其中的setClass方法实现
                       Intent intent = new Intent();
                       intent .setClass( Main.this, OtherActivity.class);
    
                        // 利用Intent传递数据
                       intent .putExtra( "College", "西南交通大学" );
                       intent .putExtra( "Grade", 2011 );
                        // 利用静态变量传递数据,直接给静态变量赋值
                       OtherActivity .myclass = "三班" ;
                        // 利用剪切板传递数据
                       ClipboardManager clipboardManager = (ClipboardManager) getSystemService( CLIPBOARD_SERVICE);
                       String address = "成都";
                       clipboardManager .setText(address);
                        // 利用全局变量传递数据
                        myData = (MyData ) getApplication ();
                        myData.setName ("笑缘心归");
    
                        startActivity(intent );// 启动Intent
                   }
               });
          }
    }
    /**
     * OtherActivity.java
     */
    package com.example.transfer;
    
    import com.example.transfer.R;
    
    import android.app.Activity;
    import android.content.ClipboardManager;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    /**
     * @author Mlion
     * 
     */
    public class OtherActivity extends Activity {
    	MyData myData;
    	private TextView textView;
    	public static String myclass = new String();
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO 自动生成的方法存根
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.other);// 加载布局文件
    		// 获取Intent传入的数据并显示
    		// 使用get...Extra方法获得Intent传递的值,直接使用静态变量传值
    		Intent intent = getIntent();
    		textView = (TextView) this.findViewById(R.id.msg);
    		ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    		String address = clipboardManager.getText().toString();
    		myData = (MyData) getApplication();
    
    		textView.setText("姓名:" + myData.getName() + "
    学校:"
    				+ intent.getStringExtra("College") + "
    年级:"
    				+ intent.getIntExtra("Grade", 0) + "
    专业:" + Main.major
    				+ "
    班级:" + myclass + "
    地址:" + address);
    	}
    }
    /*MyData.java*/
    package com.example.transfer;
    
    import android.app.Application;
    
    public class MyData extends Application {
    	public String name = new String();
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    }

    在Manifest.xml中的<Application >标签中添加以下代码

    android:name=".MyData"
    <activity android:name="com.example.transfer.OtherActivity" >
    </activity>

    在main.xml中添加:

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="数据传递" />

    在other.xml中添加:

        <TextView
            android:id="@+id/msg"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

    运行结果:

    http://m.oschina.net/blog/208596

  • 相关阅读:
    Servlet 规范 简介
    Redis简介
    some tips
    初识Servlet
    JVM基础知识
    使用typora编辑博客
    航海が始まる日
    比较好的IT教程网
    vue 使用心得---工作中一些关键点
    Vue父组件主动获取子组件的数据和方法
  • 原文地址:https://www.cnblogs.com/yc3120/p/4439372.html
Copyright © 2020-2023  润新知