初入安卓,写程序的途中遇到了好几次调试闪退,研究之后都成功解决,以此发文记录一下。
MainActivity.java
package com.example.testdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//添加跳转事件
Button btn = (Button) findViewById(R.id.list_view_vertical_stander);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent it = new Intent();
it.setClass(MainActivity.this,SecondActivity.class);
startActivity(it);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//加载建好的菜单xml文件
getMenuInflater().inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//拿到菜单每项id,然后 switch判断具体是哪个菜单项,然后写点击后的具体操作
int itemId=item.getItemId();
switch (item.getItemId()){
case R.id.list_view_vertical_stander:
Toast.makeText(MainActivity.this,"您选择查看南部地区省长列表",Toast.LENGTH_LONG).show();
break;
case R.id.list_view_vertical_reverse:
Toast.makeText(MainActivity.this,"您选择查看南部地区人大常委列表",Toast.LENGTH_LONG).show();
break;
case R.id.list_view_horizontal_stander:
Toast.makeText(MainActivity.this,"您选择查看南部地区书记列表",Toast.LENGTH_LONG).show();
break;
case R.id.list_view_horizontal_reverse:
Toast.makeText(MainActivity.this,"您选择查看南部地区行政专员列表", Toast.LENGTH_LONG).show();
break;
case R.id.grid_view_vertical_stander:
Toast.makeText(MainActivity.this,"您选择查看中部地区省长列表",Toast.LENGTH_LONG).show();
break;
case R.id.grid_view_vertical_reverse:
Toast.makeText(MainActivity.this,"您选择查看中部地区人大常委列表",Toast.LENGTH_LONG).show();
break;
case R.id.grid_view_horizontal_stander:
Toast.makeText(MainActivity.this,"您选择查看中部地区书记列表",Toast.LENGTH_LONG).show();
break;
case R.id.grid_view_horizontal_reverse:
Toast.makeText(MainActivity.this,"您选择查看中部地区行政专员",Toast.LENGTH_LONG).show();
break;
case R.id.stagger_view_vertical_stander:
Toast.makeText(MainActivity.this,"您选择查看北部地区省长列表",Toast.LENGTH_LONG).show();
break;
case R.id.stagger_view_vertical_reverse:
Toast.makeText(MainActivity.this,"您选择查看北部地区人大常委列表",Toast.LENGTH_LONG).show();
break;
case R.id.stagger_view_horizontal_stander:
Toast.makeText(MainActivity.this,"您选择查看北部地区书记列表",Toast.LENGTH_LONG).show();
break;
case R.id.stagger_view_horizontal_reverse:
Toast.makeText(MainActivity.this,"您选择查看北部地区行政专员",Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="南部地区干部" android:id="@+id/list_view">
<menu>
<item android:title="省长" android:id="@+id/list_view_vertical_stander"/>
<item android:title="人大常委" android:id="@+id/list_view_vertical_reverse"/>
<item android:title="书记" android:id="@+id/list_view_horizontal_stander"/>
<item android:title="行政专员" android:id="@+id/list_view_horizontal_reverse"/>
menu>
item>
<item android:title="中部地区干部" android:id="@+id/grid_view">
<menu>
<item android:title="省长" android:id="@+id/grid_view_vertical_stander"/>
<item android:title="人大常委" android:id="@+id/grid_view_vertical_reverse"/>
<item android:title="书记" android:id="@+id/grid_view_horizontal_stander"/>
<item android:title="行政专员" android:id="@+id/grid_view_horizontal_reverse"/>
menu>
item>
<item android:title="北部地区干部" android:id="@+id/stagger_view">
<menu>
<item android:title="省长" android:id="@+id/stagger_view_vertical_stander"/>
<item android:title="人大常委" android:id="@+id/stagger_view_vertical_reverse"/>
<item android:title="书记" android:id="@+id/stagger_view_horizontal_stander"/>
<item android:title="行政专员" android:id="@+id/stagger_view_horizontal_reverse"/>
menu>
item>
menu>
以下是效果图,一个简单的二级菜单页,点击能显示你选择了什么item。
然后我又新建了第二个页面准备让他实现跳转,就在第一个页面的**onCreate()**方法中绑定了跳转事件,加入如下代码。
//添加跳转事件
Button btn = (Button) findViewById(R.id.list_view_vertical_stander);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent it = new Intent();
it.setClass(MainActivity.this,SecondActivity.class);
startActivity(it);
}
});
问题来了,然后开始调试,程序就闪退——“xxx keeps stopping”
经检查后发现,是onOptionsItemSelected()方法和我onCreate()方法产生冲突,实现了同一个点击事件!!
只要把onCreate()方法中的点击跳转事件放到同一个事件即可。
例如想给某个textView的text属性赋值调用 textView1.setText(xxx) 方法,其中的xxx必须为指定参数类型String,否则程序也会闪退。