一場由一個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)方法。程式碼如下:
上邊這段程式碼沒有基本語法上的錯誤,所以Eclipse也沒有紅色!的提示。但是執行後就是出現不了選單。於是我就開始了我的Debug旅程。從下午6點到晚上8點。兩個小時的時間一直在那裡不斷地找啊找。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; } }
1.先是確定邏輯沒有錯誤。
2.是確定沒有手誤(其實就是手誤當時就是沒發現)。
最後實在是受不了了,就在網上找到了這本書的原始碼。雖然第二章的原始碼是在新加了幾個其他知識點之後的原始碼。但是我還是通過分析它的程式碼找到了他實現選單呢那一部分。可是怎麼比較都發現不了問題在哪。經過分析我把重點放在了兩個重寫的onCreateOptionsMenu(Menu menu),onOptionsItemSelected(MenuItem item)方法上。對比下載的原始碼和自己的原始碼,可是除了空格和部分換行不一樣之外其餘的全一樣。但是真的是這樣嗎?
於是我一段一段的比較。對於比較長的單詞在Eclipse中換來換去發現不了不同。於是把它複製到一個記事本中對比,終於:
onOptionsItemSelected
onOptionItemSelected
恩?印象裡一模一樣的方法名怎麼對不齊呢,啊少了一個s。
不想多說,只是這又一次的尋找鍛鍊了好幾方面。其一:熟悉了Android中的幾個方法。其二(最重要):鍛鍊了找錯的能力。CSDN上有很多專案排錯的方法文章,看了有些體會,真正把那些方法運用到自己的實踐中來,這才是最重要的。最後貼幾張執行成功的圖吧: