1. 程式人生 > >一場由一個s引發的鬱悶

一場由一個s引發的鬱悶

         最近想轉業從事android開發。因為2年前研究過。所以搭建環境什麼的都是從原始地址下載的基本沒有什麼困難。跑書店看到一本名為《第一行程式碼》的書。想買,但是發現網上有PDF版的(昨天發現其實竟然還有word版的)。發現上邊第二章有一個實現選單功能的案例。於是照著做了一下。可是執行起來怎麼按都不出選單。無論是在我的Android4.4.4的中興物理機上還是在4.0.3的AVD上都不行。

其過程是:

        現在res資料夾下邊新建一個menu資料夾。然後在menu資料夾下新建一個名為main.xml的android XML檔案。寫入:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>

</menu>
然後再在類檔案中重寫onCreateOptionsMenu(Menu menu),onOptionsItemSelected(MenuItem item)方法。程式碼如下:
package a.b.c;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class FirstActivity extends Activity{
protected void onCreate(Bundle savedInstanceState){
	super.onCreate(savedInstanceState);
	requestWindowFeature(Window.FEATURE_NO_TITLE);
	setContentView(R.layout.first_layout);
	Button button1 = (Button) findViewById(R.id.button_1);
	button1.setOnClickListener(new OnClickListener(){
	public void onClick(View v) {
		Toast.makeText(FirstActivity.this, "能見到我說明你成功了", Toast.LENGTH_SHORT).show();
	}
});
	
	
}

public boolean onCreateOptionsMenu(Menu menu){
	getMenuInflater().inflate(R.menu.main, menu);
	return true;
}

public boolean onOptionItemSelected(MenuItem item){
	switch(item.getItemId()){
	case R.id.add_item:
	Toast.makeText(this, "親在這呢", Toast.LENGTH_SHORT).show();
	break;
	case R.id.remove_item:
	Toast.makeText(this, "啊終於見面了", Toast.LENGTH_SHORT).show();
	break;
	default:
	}
	return true;
}

}
上邊這段程式碼沒有基本語法上的錯誤,所以Eclipse也沒有紅色!的提示。但是執行後就是出現不了選單。於是我就開始了我的Debug旅程。從下午6點到晚上8點。兩個小時的時間一直在那裡不斷地找啊找。

1.先是確定邏輯沒有錯誤。

2.是確定沒有手誤(其實就是手誤當時就是沒發現)。

最後實在是受不了了,就在網上找到了這本書的原始碼。雖然第二章的原始碼是在新加了幾個其他知識點之後的原始碼。但是我還是通過分析它的程式碼找到了他實現選單呢那一部分。可是怎麼比較都發現不了問題在哪。經過分析我把重點放在了兩個重寫的onCreateOptionsMenu(Menu menu),onOptionsItemSelected(MenuItem item)方法上。對比下載的原始碼和自己的原始碼,可是除了空格和部分換行不一樣之外其餘的全一樣。但是真的是這樣嗎?

於是我一段一段的比較。對於比較長的單詞在Eclipse中換來換去發現不了不同。於是把它複製到一個記事本中對比,終於:

onOptionsItemSelected

onOptionItemSelected

恩?印象裡一模一樣的方法名怎麼對不齊呢,啊少了一個s。

    不想多說,只是這又一次的尋找鍛鍊了好幾方面。其一:熟悉了Android中的幾個方法。其二(最重要):鍛鍊了找錯的能力。CSDN上有很多專案排錯的方法文章,看了有些體會,真正把那些方法運用到自己的實踐中來,這才是最重要的。最後貼幾張執行成功的圖吧: