Android之Bundle,Activity和Intent的使用

本文介绍了如何在Android应用中使用Bundle和Intent实现Activity间的交互。通过点击‘选择水果’按钮,展示一个包含水果列表的ListView。用户选择水果后,信息会通过Intent传回主Activity,更新显示状态。主要涉及前端界面布局设计,如ListView的创建,以及后端Activity的编程,包括Fruit Activity的创建,设置ListView的适配器,以及在MainActivity中处理Intent传递的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         这个实验做的就是在不同的模拟一个简易的网上选购水果的过程,启动应用时状态为: you select nothing,点击”choose fruit” 按钮, 跳转至选择水果的 Activity, 使用 ListView 显示各种水果的图标和名称,点击一栏水果,跳转回原来的 Activity,并改变状态,显示你刚刚点击选择的水果。


首先我们进行前端设计,我们设计的这个要进行界面之间的设计。在layout加了别的界面。加入一个xml,如下所示:

增加一个listview的xml:

增加一个line.xml是一个每一行的定义:

最后是主界面:

这就是前端布局,已经结束了。接下来就是后端:

我们在SRC里增加一个activity,Fruit:

代码如下:

package com.example.ex4;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class Fruit extends Activity {
	ListView list;
	private List<Map<String, Object>> mDataList = new ArrayList<Map<String, Object>>();
	
	private void setData(){
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("name", "Apple");
		map.put("image", R.drawable.apple);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Banana");
		map.put("image", R.drawable.banana);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Cherry");
		map.put("image", R.drawable.cherry);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Coco");
		map.put("image", R.drawable.coco);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Kiwi");
		map.put("image", R.drawable.kiwi);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Orange");
		map.put("image", R.drawable.orange);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Pear");
		map.put("image", R.drawable.pear);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Strawberry");
		map.put("image", R.drawable.strawberry);
		mDataList.add(map);
		
		map = new HashMap<String,Object>();
		map.put("name", "Watermelon");
		map.put("image", R.drawable.watermelon);
		mDataList.add(map);
	}
	
	//TextView ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.fruit);
		
		setData();
		SimpleAdapter listItemAdapter = new SimpleAdapter(this,mDataList,R.layout.line,
				new String[]{"name","image"},new int[]{R.id.textView1,R.id.imageView1} );
		list = (ListView)findViewById(R.id.listView1);
		list.setAdapter(listItemAdapter);
		
		list.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				setData();
				Bundle bundle=new  Bundle();
				bundle.putString("name",mDataList.get(position).get("name").toString());
				Intent intent =new Intent(Fruit.this,MainActivity.class);
		
				intent.putExtras(bundle);
				setResult(android.app.Activity.RESULT_OK,intent);
				finish();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	
	
}

里面的setData函数就是建立映射,把水果的名字和图片进行了映射。执行OnCreate()之后首先执行这个,然后生成List中数据的适配器listItemAdapter。

SimpleAdapter listItemAdapter = new SimpleAdapter(this,mDataList,R.layout.line,
				new String[]{"name","image"},new int[]{R.id.textView1,R.id.imageView1} );

再设置ListView的适配器。

list = (ListView)findViewById(R.id.listView1);
list.setAdapter(listItemAdapter);
接着设置ListView中item的点击事件处理。这里使用了Bundle,是将button按住的“name”存入bundle,再启动intent事件,并把结果使用setResult()返回。

list.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				setData();
				Bundle bundle=new  Bundle();
				bundle.putString("name",mDataList.get(position).get("name").toString());
				Intent intent =new Intent(Fruit.this,MainActivity.class);
		
				intent.putExtras(bundle);
				setResult(android.app.Activity.RESULT_OK,intent);
				finish();
			}
		});
还有需要注意的就是要把这个Activity加入到Android.Mainfest.xml里面。


在MainActivity加入Button事件触发进入Fruit.Activity。还有就是要接收intent发来的信息。

总的Activity如下:

package com.example.ex4;

import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
	Button choose_fruit;
	TextView t;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		t =  (TextView) findViewById(R.id.textView1);
		choose_fruit =  (Button) findViewById(R.id.button1);
		
		choose_fruit.setOnClickListener(new OnClickListener() {
			public void onClick(View V) {
				// 跳转到activity fruit中并要求将信息回传
				Intent intent = new Intent(MainActivity.this, Fruit.class);
				startActivityForResult(intent, 123);
			}
		});
	}
	
	public void onActivityResult(int requestCode, int resultCode, Intent idata) {
		if (requestCode == 123) {
			if (resultCode == Activity.RESULT_OK) {
				String name = idata.getExtras().getString("name");
				t.setText(name);
			}
		}
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}
以下就是接收消息,requestCode要为123。
public void onActivityResult(int requestCode, int resultCode, Intent idata) {
		if (requestCode == 123) {
			if (resultCode == Activity.RESULT_OK) {
				String name = idata.getExtras().getString("name");
				t.setText(name);
			}
		}
	}

以下就是Button触发之后的事件响应。

choose_fruit.setOnClickListener(new OnClickListener() {
			public void onClick(View V) {
				// 跳转到activity fruit中并要求将信息回传
				Intent intent = new Intent(MainActivity.this, Fruit.class);
				startActivityForResult(intent, 123);
			}
		});

选择界面:

点击choose fruit:

点击StrawBery:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值