这个实验做的就是在不同的模拟一个简易的网上选购水果的过程,启动应用时状态为: 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: