2

私たちのAndroidアプリには、ビットマップを表示するグリッドビューを持つアクティビティがあります。クリックすると、AdapterView.OnItemClickListenerのカスタム実装が呼び出され、新しいインテントが作成され、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);
}

起動されたアクティビティには特別なことは何もありません。変数を初期化するだけです。これ以上の情報や情報源が必要な場合は、喜んで提供させていただきますので、お問い合わせください。

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


   }   
4

1 に答える 1

1

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

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

また、これは単にデッドコードである可能性がありますが、でarg1変数を使用することはありませんonPause()

于 2012-04-04T00:29:01.380 に答える