一场由一个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上有很多项目排错的方法文章,看了有些体会,真正把那些方法运用到自己的实践中来,这才是最重要的。最后贴几张运行成功的图吧:




猜你喜欢

转载自blog.csdn.net/jnitjy/article/details/45891841