2012-04-04 97 views
2

在我們的Android應用程序中,我有一個具有顯示位圖的gridview的活動。當點擊它時,它會調用我的自定義實現AdapterView.OnItemClickListener,它將創建一個新的intent並調用startActivity(intent)。一旦我進入新的活動並按下後退按鈕,應用程序就會顯示前一個活動的屏幕,但根本沒有與之交互,或者如果需要一點時間回到上一個活動(由於斷點),那麼它只會顯示一個黑屏。以下是最終啓動新版本的Activity的一些來源。Android onResume有時會顯示黑屏,有時不會檢測用戶交互

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

倍率有什麼特別的啓動的活動,只是初始化變量。如果您需要更多信息或來源,請提問,因爲我很樂意提供。

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


    } 
+0

如果您註釋掉'onPause()'中的兩行關閉數據庫並將引用設置爲null,會發生什麼情況? – Squonk 2012-04-04 00:29:21

+0

@MisterSquonk仍然有問題。我在那裏,因爲我在其他活動中使用數據庫,但註釋它不會導致數據庫錯誤,所以我想這些行是無用的。 – contrapsych 2012-04-04 00:45:02

+0

好吧,值得一試,只是基於一種預感,可能關閉數據庫會使您打開的任何遊標失效。至於線路無用?當你不再使用數據庫時,純粹主義者會告訴你總是關閉數據庫,但我很少這樣做 - 你可以在Android SQLite數據庫上有多個打開的「句柄」,而不會出現任何問題。 – Squonk 2012-04-04 00:55:16

回答

1

好像這個代碼塊應該在你的onCreate()方法。在onResume()被調用後,Activity在後臺仍處於活動狀態,因此您不需要在此處重置點擊偵聽器。

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

而且,這可能僅僅是死代碼,但你永遠不使用arg1變量onPause()

+0

我從onResume()中刪除了偵聽器,但是這個問題依然存在。我確實在onCreate()中設置了偵聽器,甚至在之前。我也沒有例外,或在logcat中發出警告或錯誤。 – contrapsych 2012-04-04 00:40:20

+0

我建議使用'Log.v()'來進一步調查是什麼導致你的活動加載不正確(即你的問題的黑屏方面肯定不會發生......) – 2012-04-04 01:10:39

相關問題