私たちの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);
}
データベースを閉じてリファレンスをnullに設定する 'onPause()'の2行をコメントアウトするとどうなりますか? – Squonk
@MisterSquonkまだ問題があります。私は他のアクティビティでデータベースを使用しているため、そこにはありますが、それをコメントアウトしてもデータベースエラーは発生しないので、これらの行は役に立たないと思います。 – contrapsych
OK、データベースをクローズすると、開いている可能性のあるカーソルが無効になっていたかも知れません。無駄な線については?あなたはもはやそれらを使用していないときにいつもDBを閉じるようにPuristsが指示しますが、私はめったにそれを行いません。あなたは問題なくAndroidのSQLite DBに複数の 'ハンドル'を開くことができます。 – Squonk