java - Android onResume 有时会显示黑屏,有时它不会检测到用户交互

标签 java android

在我们的 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() 方法中。 ActivityonResume() 被调用后仍然在后台运行,因此您不需要在此处重置点击监听器。

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/

相关文章:

java - 根据 toMap 集合中的值过滤流

Android 窗口 WindowLeaked - Activity 泄漏了最初在此处添加的窗口

android - 使用带有 smtp 但没有 SSL 的 JavaMail API 在 android 中发送电子邮件

java - 我如何使用 String 变量而不是在 android 中使用 R.id.webview1

android - 启动 Android Low Memory killer 的时机

java - 使用 Java String.format

java - "WARN No appenders could be found for logger"甚至记录器正在记录内容

java - 如何处理消息包中变量的存在(本地化)

java - 获取 HTML (JSP) 按钮中的字符串值

java - 我的应用程序崩溃了 android eclipse?