当前位置:  编程技术>移动开发
本页文章导读:
    ▪onActivityResult传值的应用        onActivityResult传值的使用 有时候在群里加入的新人总会喜欢问一些过去的问题  有时候不想回答 是因为回答的次数多了不回答又打击人的积极性  谁让自己接触的早呢  为了省劲还是把简.........
    ▪ 第三章: 设立手机背景图片        第三章: 设置手机背景图片 效果:main.xml <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.andr.........
    ▪ Mobileup 的地心引力传感器控制       Mobileup 的重力传感器控制 Mobileup 的简单demo程序可以传送重力传感器数据, 就如同游戏中可以用手机的传感器控制html5页面的元素了, 很好玩. 下一步是给demo写个若干小球控制的html5页面.demo .........

[1]onActivityResult传值的应用
    来源: 互联网  发布时间: 2014-02-18
onActivityResult传值的使用
有时候在群里加入的新人总会喜欢问一些过去的问题  有时候不想回答 是因为回答的次数多了

不回答又打击人的积极性  谁让自己接触的早呢  为了省劲还是把简单的东西作为指导篇吧



多个activity之间的传值 其实就是onActivityResult,然后别忘了还有一个action的问题 就是在主xml中添加自己的action以便于识别,最后次activity别忘了finish()。


public class Wizard extends Activity {   
  
    private TextView step1result, step2result, step3result;   
  
    public static final String INTENT_STEP1 = "com.novoda.STEP1";   
    public static final String INTENT_STEP2 = "com.novoda.STEP2";   
    public static final String INTENT_STEP3 = "com.novoda.STEP3";   
  
    private static final int STEP1 = 1;   
    private static final int STEP2 = 2;   
    private static final int STEP3 = 3;   
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.wizard);   
           
        this.step1result = (TextView)findViewById(R.id.step1result);   
        this.step2result = (TextView)findViewById(R.id.step2result);   
        this.step3result = (TextView)findViewById(R.id.step3result);     
           
        startActivityForResult(new Intent(Wizard.INTENT_STEP1), STEP1);           
    }   
       
       
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
        switch (requestCode) {   
            case STEP1:   
                this.step1result.setText(data.getStringExtra("STEP1RESULT"));   
                startActivityForResult(new Intent(Wizard.INTENT_STEP2), STEP2);       
                break;   
            case STEP2:   
                this.step2result.setText(data.getStringExtra("STEP2RESULT"));   
                startActivityForResult(new Intent(Wizard.INTENT_STEP3), STEP3);       
                break;   
            case STEP3:   
                this.step3result.setText(data.getStringExtra("STEP3RESULT"));   
                break;   
        }   
    }   
}  




public class Step1 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.step1);

        Button nextStep = (Button)findViewById(R.id.goto2);
        nextStep.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent it = new Intent();
                it.putExtra("STEP1RESULT", ((EditText)findViewById(R.id.step1value)).getText()
                        .toString());
                setResult(Activity.RESULT_OK, it);
                finish();
            }
        });
    }
}



后面的step2 step3都是一样的了

然后还有主xml


<application android:icon="@drawable/icon" android:label="@string/app_name">
		<activity android:name=".Wizard" android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>

		<activity android:name=".Step1" android:label="Step1">
			<intent-filter>
				<action android:name="com.novoda.STEP1" />
				<category android:name="android.intent.category.DEFAULT" />
			</intent-filter>
		</activity>

		<activity android:name=".Step2" android:label="Step2">
			<intent-filter>
				<action android:name="com.novoda.STEP2" />
				<category android:name="android.intent.category.DEFAULT" />
			</intent-filter>
		</activity>

		<activity android:name=".Step3" android:label="Step3">
			<intent-filter>
				<action android:name="com.novoda.STEP3" />
				<category android:name="android.intent.category.DEFAULT" />
			</intent-filter>
		</activity>
	</application>
	<uses-sdk android:minSdkVersion="7" />
</manifest> 





======================================================================

根据文档的解释,Activity是Android开发中非常重要的一个基础类。我把它想像成J2ME中的Display类,或者是Win32平台上的Form类,也许不准确,但是它的重要性我觉得应该是一样的(当然,如果我们写的是一个没有界面的应用,例如后台运行的服务之类的,可以不用Display的)。

1.     在一个Activity中使用多个View

如果把Activity看作MVC中的Control?它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,我们是可以只用一个Activity管理多个不同的View来实现简单的逻辑。
首先,我们增加一个新的资源描述layout/second.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView id="@+id/txt" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello 中国"
    />
<Button id="@+id/go2"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="back">
        <requestFocus />
    </Button>  
</LinearLayout>

除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器。

  public void setViewOneCommand()
    ...{
        Button btn = (Button)findViewById(R.id.go);
        btn.setOnClickListener(new View.OnClickListener()
        ...{
            public void onClick(View v)
            ...{
                helloTwo.this.setContentView(R.layout.second);
                helloTwo.this.setViewTwoCommand();               
            }
        });      
        Button btnExit=(Button)findViewById(R.id.exit);
        btnExit.setOnClickListener(new View.OnClickListener()...{
            public void onClick(View v)...{
                helloTwo.this.finish();
            }
        });   
    }
    public void setViewTwoCommand()
    ...{
        Button btnBack=(Button)findViewById(R.id.go2);
        btnBack.setOnClickListener(new View.OnClickListener()...{
            public void onClick(View v)...{
                helloTwo.this.setContentView(R.layout.main);
                helloTwo.this.setViewOneCommand();
            }                         
        });
    }

最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。新的onCreate方法如下:

    public void onCreate(Bundle icicle) ...{
        super.onCreate(icicle);
        setTheme(android.R.style.Theme_Dark);
        setContentView(R.layout.main);   
        setViewOneCommand();       
    }

编译,运行,OK。

2.     还是回到正道上,多个Activity之间的跳转

Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent的用法比较复杂,现在我先看看它最简单的用法。

先在应用中增加两个Activity,这需要修改AndroidManifest.xml文件了,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.sharetop.android.hello.three">
    <application android:icon="@drawable/icon">
        <activity android:label="@string/app_name">
            <intent-filter>
                <action android:value="android.intent.action.MAIN" />
                <category android:value="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:label="@string/app_name">
        </activity>
    </application>
</manifest>

很简单,就是加一个标签而已,新标签的class是.HelloThreeB,显示的应用标题与前一个Activity一样而已,然后第二步就是修改一个HelloThree类的实现,在onCreate方法中绑定按钮的事件处理器:

    public void onCreate(Bundle icicle) ...{
        super.onCreate(icicle);
        setTheme(android.R.style.Theme_Dark);
        setContentView(R.layout.main);
        setViewOneCommand();
    }
    public void setViewOneCommand()
    ...{
        Button btn = (Button)findViewById(R.id.go);
        btn.setOnClickListener(new View.OnClickListener()
        ...{
            public void onClick(View v)
            ...{
                Intent intent = new Intent();
                intent.setClass(HelloThree.this, HelloThreeB.class);
                startActivity(intent);
                finish();           
            }
        });      
        Button btnExit=(Button)findViewById(R.id.exit);
        btnExit.setOnClickListener(new View.OnClickListener()...{
            public void onClick(View v)...{
                HelloThree.this.finish();
            }
        });   
    }

这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。最后一句finish()表示将当前Activity关掉(如果不关掉会如何?你可以自己试一下看效果,事实上有时我们是不需要关掉当前Activity的)。

然后,我们同样弄一个Activity类HelloThreeB,代码与前面的差不多,只是将setClass的两个参数反一下,这样就可以简单地实现在两个Activity界面中来回切换的功能了。

3.     如果我想在两个Activity之间进行数据交换,怎么办?

前例中的startActivity()只有一个参数,如果需要向新打开的Activity传递参数,我们得换一个函数了, Android提供了startSubActivity(Intent,int)这个函数来实现这个功能。

函数原型为: public void startSubActivity(Intent intent, int requestCode)

这里的requestCode用来标识某一个调用,一般由我们定义一个常量。

如何把参数传过去呢?Intent类在提供setClass()函数的同时也提供了一个setData()函数。

函数原型为:public Intent setData(ContentURI data)

参数类型是ContentURI,它的详细内容下回再分析,现在就把它当成一个String类型来用吧。

参数带到新的Activity后,同样用Activity.getIntent()函数可以得到当前过来的Intent对象,然后用getData()就取到参数了。

把参数带回来的方法是Activity.setResult(),它有几个形式,现在先看最简单的一个吧。

函数原型是:public final void setResult(int resultCode, String data)

resultCode是返回代码,同样用来标识一个返回类型,而data则是它要返回的参数。

在原来的Activity中的事件处理回调函数onActivityResult,会被系统调用,从它的参数里可以得到返回值。

函数原型为:protected void onActivityResult(int requestCode, int resultCode,String data, Bundle extras)

这里的requestCode就是前面启动新Activity时的带过去的requestCode,而resultCode则关联上了setResult中的resultCode,data是参数,extras也是一个很重要的东西,后面再研究一下它的作用。

下面,我们来看一下代码吧,先看看HelloThree中的代码:

    public void setViewOneCommand()
    ...{
        Button btn = (Button)findViewById(R.id.go);
        btn.setOnClickListener(new View.OnClickListener()
        ...{
            public void onClick(View v)
            ...{
                try
                ...{                   
                    Intent intent = new Intent();
                    intent.setClass(HelloThree.this, HelloThreeB.class);
                    intent.setData(new ContentURI("One"));                   
                    startSubActivity(intent,REQUEST_TYPE_A);
                }
                catch(Exception ex)...{}
            }
        });      
        Button btnExit=(Button)findViewById(R.id.exit);
        btnExit.setOnClickListener(new View.OnClickListener()...{
            public void onClick(View v)...{
                HelloThree.this.finish();
            }
        });   
    }
    protected void onActivityResult(int requestCode, int resultCode,
            String data, Bundle extras)
    ...{
        if (requestCode == REQUEST_TYPE_A) ...{
            if (resultCode == RESULT_OK) ...{
                Log.v(TAG,data);
                TextView txt = (TextView)findViewById(R.id.txt);
                txt.setText(data);               
            }
        }
    }

这里的REQUEST_TYPE_A是我们定义的一个常量。在onActivityResult中用它与RESULT_OK一起作为条件判断如何处理返回值,这里只是简单将TextView显示值换成传来的字串。

再来看看另一个HelloThreeB类的实现代码:

    private Intent i;
    protected void onCreate(Bundle icicle) ...{
        super.onCreate(icicle);
        setContentView(R.layout.second);   
       
        i = getIntent();
       
        android.util.Log.v(TAG,"onCreate");
        Button btn = (Button)findViewById(R.id.go);
        btn.setOnClickListener(new View.OnClickListener()...{
            public void onClick(View v)...{
                String result=HelloThreeB.this.i.getData().toString()+" And Two";
                HelloThreeB.this.setResult(RESULT_OK,result);
                finish();
            }           
        });
       
        TextView v = (TextView)findViewById(R.id.txt);
        v.setText("Param is "+i.getData().toString());
       
    }

在按钮处理事件中,从Intent取出参数,处理一下再用setResult返回给前一个Activity即可。

编译运行即可。

来源:http://www.sf.org.cn/Android/lumen/20977.html



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ghd2000/archive/2010/07/06/5716894.aspx












    
[2] 第三章: 设立手机背景图片
    来源: 互联网  发布时间: 2014-02-18
第三章: 设置手机背景图片
效果:














main.xml


<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>

<Gallery
android:id="@+id/gall"
android:layout_width="320px"
android:layout_height="429px"
android:layout_x="0px"
android:layout_y="2px"
>
</Gallery>
</AbsoluteLayout>






AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="wallpaper.test"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".WallpaperTest"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
	<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>

</manifest> 




package wallpaper.test;

import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.SpinnerAdapter;
import android.widget.Toast;

public class WallpaperTest extends Activity {
	protected static InputStream io;
	private ImageAdapter myImage;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** 载入main.xml文件 */
        setContentView(R.layout.main);
        /** 设置一组图片*/
        Integer[] myImageIde={
        	R.drawable.pic01,
        	R.drawable.pic02,
        	R.drawable.pic03,
        	R.drawable.pic04,
        	R.drawable.pic05
        };
        
        myImage=new ImageAdapter(WallpaperTest.this,myImageIde);
        /** 设置图为Gallery的显示方式*/
        Gallery g=(Gallery)findViewById(R.id.gall);
        g.setAdapter((SpinnerAdapter) myImage);
        g.setOnItemClickListener(new Gallery.OnItemClickListener(){
        	 /** 设置ITEM的点击事件*/
			@Override
			public void onItemClick(AdapterView<?> parent, View v, final int position,
					long id) {
				/**设置 消息框*/
				new AlertDialog.Builder(WallpaperTest.this)
				/** 设置消息框的标题*/
				.setTitle(R.string.alert_title)
				/** 设置标题框的图片*/
				.setIcon(myImage.myImageIds[position])
				/** 设置消息框体的文本*/
				.setMessage(R.string.alert_message)
				/** 设置点击确定按钮的事件*/
				.setPositiveButton(R.string.alert_ok, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
						Resources resources=getBaseContext().getResources();
						io=resources.openRawResource(myImage.myImageIds[position]);
						try {
							/** 更换桌面*/
							setWallpaper(io);
							/** 设置Toast的消息*/
							Toast.makeText(WallpaperTest.this,getString(R.string.alert_isgllery), Toast.LENGTH_LONG).show();
							
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
					/** 设置点击取消按钮的事件*/
				}).setNegativeButton(R.string.alert_cancle, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						/** 设置Toast的消息*/
						Toast.makeText(WallpaperTest.this, getString(R.string.alert_no), Toast.LENGTH_LONG).show();
					}
				}).show();
			}
        });
    }
    @Override  
	  public void setWallpaper(InputStream data) throws IOException {  
	    super.setWallpaper(data);  
	  }  
}





package wallpaper.test;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter{
	int mGalleryBackground;
	private Context context;
	protected Integer[] myImageIds;
	public ImageAdapter(Context c,Integer[] aid){
		context=c;
		myImageIds=aid;
		/** 设置背景图片*/
		TypedArray a=c.obtainStyledAttributes(R.styleable.Gallery);
		mGalleryBackground=a.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
		a.recycle();
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return myImageIds.length;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ImageView i =new ImageView(context);
		/** 设置背景图片给ImageView*/
		i.setImageResource(myImageIds[position]);
		/**图片的高和宽*/
		i.setScaleType(ImageView.ScaleType.FIT_XY);
		/**设置Gallery的背景图*/
		i.setBackgroundResource(mGalleryBackground);
		return i;
	}
	
}




1 楼 chenghaozuibang 2011-07-13  
图片可以设为背景,但是大小不对啊  不能全屏显示呀

    
[3] Mobileup 的地心引力传感器控制
    来源: 互联网  发布时间: 2014-02-18
Mobileup 的重力传感器控制
Mobileup 的简单demo程序可以传送重力传感器数据, 就如同游戏中可以用手机的传感器控制html5页面的元素了, 很好玩.
下一步是给demo写个若干小球控制的html5页面.




demo APK 文件可以在https://github.com/superisaac/mobileup/downloads 下载


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android中实现为TextView添加多个可点击的文本 iis7站长之家
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3