Android之Bundle,Activity和Intent的使用

来源:互联网 发布:网络填表信息采集 编辑:程序博客网 时间:2024/05/16 01:17

         这个实验做的就是在不同的模拟一个简易的网上选购水果的过程,启动应用时状态为: 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 ;@Overrideprotected 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(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubsetData();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();}});}@Overridepublic 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;}@Overridepublic 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(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stubsetData();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;@Overrideprotected 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);}}}@Overridepublic 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;}@Overridepublic 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:


0 0