开发一个特别简单的小安卓应用,主要做了这些事情:

1、配置activity_main.xml文件

    放置一个TextView和一个ListView,TextView用于显示文本,ListView设置id问listview0用于放置多个Item;

Item的position(位置)和Id(第几行)都是从0开始(onItemClick(AdapterView<?> arg0, View view,int position, long id) )

2、新建listview0.xml文件

   放置一个ImageView,用于显示图片。此文件布局即为上面ListView中一个Item的布局。

3、为ListView配置数据源

   由于listview0.xml里面只有一个ImageView,所以数据设置为以下方法:

private List<Map<String, Object>> getData() {
 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
 Map<String, Object> map = null;
 int imgs[] = new int[] { R.drawable.buyno, R.drawable.quno };
 for (int i = 0; i < imgs.length; i++) {
 map = new HashMap<String, Object>();
 map.put("imageview", imgs[i]);
 list.add(map);
 }
 return list;
 }

适配器将数据配置到ListView中

SimpleAdapter adapter = new SimpleAdapter(this, getData(),
 R.layout.listview01, new String[] { "imageview" },
 new int[] { R.id.imageview });
 listView.setAdapter(adapter);

4. ListView中Item点击事件:

  传递Item的Id给下一个Avtivity用启动,以确保点击不同Item响应不同事件。

 

listView.setOnItemClickListener(new OnItemClickListener() {
 @Override
 public void onItemClick(AdapterView<?> arg0, View imageView,
 int position, long id) {
 Intent intent = new Intent();
 intent.putExtra("position", position + "");
 intent.setClass(MainActivity.this, ChoiceActivity.class);
 startActivity(intent);
 }
 });

5、配置菜单:(菜单开发1)

在menu文件夹下配置main.xml中的item并设置Id,用于点击Item时的区分。

6、菜单点击事件:

根据Item的ID响应不同事件。

public boolean onOptionsItemSelected(MenuItem item) {
 int id = item.getItemId();
 if (id == R.id.exit0) {
 //退出
 MainActivity.this.finish();
 return true;
 }
 return super.onOptionsItemSelected(item);
 }

7、配置另一个Activity的布局文件choice.xml 

放置一个ImageView和两个按钮并居中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" >

 <ImageView 
 android:id="@+id/imageview2"
 android:src="@drawable/think"
 android:layout_width="fill_parent"
 android:layout_height="300dp"
 android:contentDescription="@string/think"
 android:layout_gravity="center"
 /> <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:gravity="center"
 android:orientation="horizontal" > <Button
 android:id="@+id/choiceButton"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/chose"
 android:layout_gravity="center_horizontal" /> <Button
 android:id="@+id/exitbutton"
 android:text="@string/back"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" /> </LinearLayout>
</LinearLayout>

8、启动另一个Activity时获取数据

Intent intent = this.getIntent();
 position = intent.getStringExtra("position");

9、根据不同的Item点击事件来设置不同的图片(根据posotion来判断)

//填充图片
 private int[] getImgs() {
 int imgs[] = new int[2];
 if("0".equals(position)){
 imgs[0] = R.drawable.buy;
 imgs[1] = R.drawable.nobuy;
 }else if("1".endsWith(position)){
 imgs[0] = R.drawable.go;
 imgs[1] = R.drawable.nogo;
 }
 return imgs;
 }

10、ImageVIew和Buttond的点击事件

点击一次随机获取图片

//转换图片
 private Drawable changeImg(int[] imgs) {
 Drawable drawable;
 int num = (int)(Math.random()*3);
 if(num>=0&&num<1){
 drawable = getResources().getDrawable(imgs[0]);
 }else if(num>=1&&num<2){
 drawable = getResources().getDrawable(R.drawable.think);
 }else{
 drawable = getResources().getDrawable(imgs[1]);
 }
 return drawable;
 }

主干:

Drawable drawable = null ;
 int[] imgs = getImgs();
 drawable = changeImg(imgs);
 imageView.setImageDrawable(drawable);

10、添加菜单并设置点击事件(菜单开发2)

copy别人高质量代码如下

//创建菜单
 @Override
 public boolean onCreateOptionsMenu(Menu menu) { /*
 * 
 * add()方法的四个参数,依次是:
 * 
 * 1、组别,如果不分组的话就写Menu.NONE,
 * 
 * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
 * 
 * 3、顺序,那个菜单现在在前面由这个参数的大小决定
 * 
 * 4、文本,菜单的显示文本
 */ menu.add(Menu.NONE, Menu.FIRST + 1, 5, "有待开发").setIcon(
 android.R.drawable.ic_menu_delete);
 // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
 // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
 menu.add(Menu.NONE, Menu.FIRST + 2, 2, "有待开发").setIcon(
 android.R.drawable.ic_menu_edit);
 menu.add(Menu.NONE, Menu.FIRST + 3, 6, "退出").setIcon(
 android.R.drawable.ic_menu_help);
 menu.add(Menu.NONE, Menu.FIRST + 4, 1, "有待开发").setIcon(
 android.R.drawable.ic_menu_add);
 menu.add(Menu.NONE, Menu.FIRST + 5, 4, "有待开发").setIcon(
 android.R.drawable.ic_menu_info_details);
 menu.add(Menu.NONE, Menu.FIRST + 6, 3, "有待开发").setIcon(
 android.R.drawable.ic_menu_send);

 return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {
 case Menu.FIRST + 1:
 Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
 break;
 case Menu.FIRST + 2:
 Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
 break;
 case Menu.FIRST + 3:
 ChoiceActivity.this.finish();
 break; case Menu.FIRST + 4:
 Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
 break;
 case Menu.FIRST + 5:
 Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
 break;
 case Menu.FIRST + 6:
 Toast.makeText(this, "有待开发", Toast.LENGTH_LONG).show();
 break;
 }
 return true;
 }

番外:添加摇一摇换图片功能:

首先需实现接口SensorEventListener

1、声明传感器管理和振动器

//传感器管理类
 private SensorManager sensorManager;
 //振动器
 private Vibrator vibrator;

2、获取系统服务

在OnCreate函数中

//传感器
 sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
 //震动
 vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);

3、注册监听

重载OnResume函数

//注册监听
 sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
 SensorManager.SENSOR_DELAY_NORMAL);

4、解除监听

重载OnPause函数

sensorManager.unregisterListener(this);

5、摇一摇响应事件

粘贴别人高质量代码

@Override
 public void onSensorChanged(SensorEvent event) { int sensorType = event.sensor.getType(); 
 //values[0]:X轴,values[1]:Y轴,values[2]:Z轴 
 float[] values = event.values; 
 if (sensorType == Sensor.TYPE_ACCELEROMETER) 
 { 
 if ((Math.abs(values[0]) > 17 || Math.abs(values[1]) > 17 || Math 
 .abs(values[2]) > 17)) 
 {  /*主要响应事件*/
 Drawable drawable = null ;
 int[] imgs = getImgs();
 drawable = changeImg(imgs);
 imageView.setImageDrawable(drawable);/*响应事件结束*/
 //摇动手机后,再伴随震动提示~~ 
 vibrator.vibrate(500); 
 } 

 } 
 }