2

これは、単一の「検索」を含む非常に単純Activityなものです。ActionView を検索ボタンに設定したいので、 を使用して XML レイアウトを渡します。アクションビューとしてアタッチしたいレイアウトを膨らませます。ActionBarMenuItemMenuItem.setActionView(int ResId)MenuItem

button、まったく同じActivity. 開発オプションで「アクティビティを保持しない」が設定されています。

問題: OnClickListener がアクション ビュー内のウィジェットに設定された後、ガベージ コレクションが行われMainActivityません (以下の MAT を参照)。ただし、(インフレートするのではなく) Java でビュー階層を作成すると、本来あるべき GC になります。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Button button = new Button(this);
    button.setText("Click");

    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this, MainActivity.class);
            startActivity(i);
        }
    });
    setContentView(button);
}

@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem searchIcon = menu.add("search");
    searchIcon.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
    // I set the ActionView here:
    searchIcon.setActionView(R.layout.action_search_form);
    ViewGroup vg = ((ViewGroup)searchIcon.getActionView());
    ImageButton btn = (ImageButton)vg.findViewById(R.id.search_clear_btn);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
        }

    return true;
}
}

オブジェクトの数は、 をクリックした回数と正確に一致しますbutton。ブロックを削除するとonCreateOptionsMenu()、オブジェクトの数は正確に 1 ではなく、常に 10 未満になります。

ここに画像の説明を入力

4

0 に答える 0