在我们的 Android 应用程序中,我有一个具有显示位图的 GridView 的 Activity 。单击其中一个时,它会调用我自定义的 AdapterView.OnItemClickListener 实现,它会在其中创建一个新 Intent 并调用 startActivity(intent)。一旦我进入新的 Activity 并按下后退按钮,应用程序要么显示上一个 Activity 的屏幕,但根本没有与之交互,要么需要一段时间才能返回到上一个 Activity(由于断点),然后它只显示黑屏。这是最终启动新 Activity 的 Activity 的一些来源。
protected void onPause() {
super.onPause();
character_dbms.CloseDatabase();
character_dbms = null;
}
protected void onResume() {
super.onResume();
if(character_dbms == null)
{
character_dbms = new CharacterDBMS(this);
}
radio_group.setOnCheckedChangeListener(new RadioGroupListener());
character_selection_listener = new GridViewItemListener();
charactergrid.setOnItemClickListener(character_selection_listener);
}
这里是启动新 Activity 的函数的覆盖
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
LinearLayout selectedview = (LinearLayout)arg1;
Intent hi = new Intent(LessonActivity.this, WhiteboardActivity.class);
MandarinCharacter temp = (MandarinCharacter)adapter.getItem(arg2);
hi.putExtra("CharacterID", temp.GetID());
startActivity(hi);
}
启动的 Activity 没有什么特别的,只是初始化变量。如果您需要更多信息或来源,请询问,我很乐意提供。
onCreate()
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.lessons);
// LinearLayout
radio_holder = (LinearLayout)this.findViewById(R.id.linearLayout2);
//RadioGroup
radio_listener = new RadioGroupListener();
radio_group = new RadioGroup(this);
radio_group.setOnCheckedChangeListener(radio_listener);
radio_holder.addView(radio_group);
charactergrid = (GridView)findViewById(R.id.gridView1);
character_selection_listener = new GridViewItemListener();
character_dbms = new CharacterDBMS(this.getApplicationContext());
int numberoflessons = character_dbms.GetNumberOfLessons();
radio_buttons = new RadioButton[numberoflessons];
for(int iter = 0; iter < numberoflessons; iter++)
{
radio_buttons[iter] = new RadioButton(this);
radio_buttons[iter].setText(character_dbms.GetLessonName(iter + 1));
radio_buttons[iter].setId(iter);
radio_buttons[iter].setTextColor(R.color.Black);
radio_group.addView(radio_buttons[iter]);
}
String first_lesson_name = character_dbms.GetLessonName(1);
charactergrid.setOnItemClickListener(character_selection_listener);
}
最佳答案
看起来这段代码应该在您的onCreate()
方法中。 Activity
在 onResume()
被调用后仍然在后台运行,因此您不需要在此处重置点击监听器。
radio_group.setOnCheckedChangeListener(new RadioGroupListener());
character_selection_listener = new GridViewItemListener();
charactergrid.setOnItemClickListener(character_selection_listener);
此外,这可能只是死代码,但您永远不会在 onPause()
中使用 arg1
变量。
关于java - Android onResume 有时会显示黑屏,有时它不会检测到用户交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003302/