2012-04-04 3 views
2

私たちのAndroidアプリでは、ビットマップを表示するグリッドビューを持っています。 1つをクリックすると、AdapterView.OnItemClickListenerのカスタム実装が呼び出され、そこで新しいインテントが作成され、startActivity(intent)が呼び出されます。新しいアクティビティに入り、戻るボタンを押すと、前のアクティビティの画面が表示されますが、そのアクティビティは全く表示されません。また、以前のアクティビティに戻るために少し時間がかかります(ブレークポイント)、黒い画面しか表示されません。アクティビティのソースがあり、最終的には新しいアクティビティが開始されます。ここで 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

データベースを閉じてリファレンスをnullに設定する 'onPause()'の2行をコメントアウトするとどうなりますか? – Squonk

+0

@MisterSquonkまだ問題があります。私は他のアクティビティでデータベースを使用しているため、そこにはありますが、それをコメントアウトしてもデータベースエラーは発生しないので、これらの行は役に立たないと思います。 – contrapsych

+0

OK、データベースをクローズすると、開いている可能性のあるカーソルが無効になっていたかも知れません。無駄な線については?あなたはもはやそれらを使用していないときにいつもDBを閉じるようにPuristsが指示しますが、私はめったにそれを行いません。あなたは問題なくAndroidのSQLite DBに複数の 'ハンドル'を開くことができます。 – Squonk

答えて

1

このコードブロックは、あなたのonCreate()方法にする必要がありますように思えます。 onResume()が呼び出された後、Activityはバックグラウンドでまだ生きているので、ここでクリックリスナーをリセットする必要はありません。

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

また、これは単にデッドコードであるかもしれないが、あなたはonPause()arg1変数を使用することはありません。

+0

私はonResume()からリスナーを削除しましたが、この問題は依然として存在します。私はonCreate()BTWでリスナーを設定しています。私はlogcatに例外も警告もエラーもない。 – contrapsych

+0

あなたのアクティビティが正しく読み込まれない原因をさらに調べるために、 'Log.v()'を使うことをお勧めします(つまり、問題の黒い画面部分は間違いなく起こらないはずです...) –

関連する問題