Java Android onResume有时会显示黑屏,有时则不会';无法检测用户交互

Java Android onResume有时会显示黑屏,有时则不会';无法检测用户交互,java,android,Java,Android,在我们的Android应用程序中,我有一个活动,它有一个显示位图的gridview。当单击其中一个时,它将调用AdapterView.OnItemClickListener的自定义实现,在该实现中,它将创建一个新的intent并调用startActivity(intent)。一旦我进入新活动并按下“上一步”按钮,应用程序要么显示上一个活动的屏幕,但根本没有与之交互,要么如果需要一段时间才能返回到上一个活动(由于断点),那么它只会显示一个黑屏。以下是最终启动新活动的一些来源 protected v

在我们的Android应用程序中,我有一个活动,它有一个显示位图的gridview。当单击其中一个时,它将调用AdapterView.OnItemClickListener的自定义实现,在该实现中,它将创建一个新的intent并调用startActivity(intent)。一旦我进入新活动并按下“上一步”按钮,应用程序要么显示上一个活动的屏幕,但根本没有与之交互,要么如果需要一段时间才能返回到上一个活动(由于断点),那么它只会显示一个黑屏。以下是最终启动新活动的一些来源

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);

}
下面是启动新活动的函数的重写

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);
}
public void onItemClick(适配器视图arg0、视图arg1、内部arg2、长arg3){
//TODO自动生成的方法存根
LinearLayout selectedview=(LinearLayout)arg1;
Intent hi=新的Intent(LessonActivity.this、WhiteboardActivity.class);
MandarinCharacter temp=(MandarinCharacter)adapter.getItem(arg2);
hi.putExtra(“CharacterID”,temp.GetID());
星触觉(hi);
}
启动的活动没有什么特别之处,只是初始化变量。如果您需要更多的信息或来源,请询问,因为我很乐意提供

onCreate()

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.lessons);
//线性布局
radio_holder=(LinearLayout)this.findViewById(R.id.linearLayout2);
//放射组
radio_listener=新的RadioGroup listener();
无线电组=新的无线电组(本);
radio_group.setOnCheckedChangeListener(radio_listener);
radio_holder.addView(radio_组);
charactergrid=(GridView)findViewById(R.id.gridView1);
character_selection_listener=新的GridViewItemListener();
character_dbms=新CharacterDBMS(this.getApplicationContext());
int numberoflessons=character_dbms.GetNumberOfLessons();
单选按钮=新单选按钮[课程编号];
对于(int iter=0;iter
这段代码似乎应该在您的
onCreate()方法中。调用
onResume()
后,
活动在后台仍处于活动状态,因此您不需要在此处重置单击侦听器

radio_group.setOnCheckedChangeListener(new RadioGroupListener());
character_selection_listener = new GridViewItemListener();
charactergrid.setOnItemClickListener(character_selection_listener);

此外,这可能只是死代码,但您从未在
onPause()
中使用
arg1
变量

如果注释掉
onPause()
中关闭数据库并将引用设置为null的两行,会发生什么情况?@MisterSquonk仍然存在问题。因为我在其他活动中使用了数据库,但是注释它不会导致数据库错误,所以我想这些行是没有用的。好吧,值得一试,因为我有一种预感,关闭数据库可能会使您打开的任何光标无效。至于那些线是无用的?纯粹主义者会告诉你,当你不再使用DBs时,一定要关闭它们,但我很少这样做-在Android SQLite DB上可以有多个打开的“句柄”,没有问题。@先生,我会继续编辑并插入我的onCreate,也许这也会有帮助。我从onResume()中删除了侦听器,但这个问题仍然存在。我确实在onCreate()BTW中设置了侦听器,甚至在此之前。我在logcat中也没有发现异常、警告或错误。我建议使用
Log.v()
进一步调查导致活动加载错误的原因(即,问题的黑屏方面绝对不会发生…)
radio_group.setOnCheckedChangeListener(new RadioGroupListener());
character_selection_listener = new GridViewItemListener();
charactergrid.setOnItemClickListener(character_selection_listener);