Android OpenOptionsMenu не обновляется после однократного запуска

Прежде всего, у меня есть базовый адаптер для просмотра списка, и у каждой строки есть уникальное сообщение. Я пытаюсь заставить OpenOptionsMenu обновляться после события OnClick, но происходит то, что после 1-го события Onclick это сообщение снова и снова публикуется, игнорируя новые сообщения. У меня есть тост внутри этого события Onclick, и этот тост отображает новое сообщение для каждой строки, по которой щелкают, так что либо мои SharedPreferences не обновляются, либо OpenOptionsMenu не обновляется после первого щелчка.

   //inside BaseAdapter
    holder.share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try {
              // This is a unique value depending on the row clicked
                String mm=jsonObject.getString("post");

                SharedPreferences userInfo= m.getSharedPreferences("userInfo", m.MODE_PRIVATE);
                SharedPreferences.Editor editor= userInfo.edit();
                editor.putString("share",mm);
                editor.commit();
          // This does not update after the first click
                m.openOptionsMenu();
      // can confirm here that new value is added after every OnClick
                Toast.makeText(m.getApplicationContext(),"New Values: "+mm,Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
               Toast.makeText(m.getApplicationContext(),"error",Toast.LENGTH_SHORT).show();
            }

    }
    });

Причина, по которой я это делаю, заключается в том, что я включаю в Android действие простого обмена http://developer.android.com/training/sharing/shareaction.html и предварительно заполняю его данными из строк в представлении списка. OnCreateOptionsMenu выглядит следующим образом

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_login, menu);
        MenuItem shareItem= menu.findItem(R.id.action_share);
        SharedPreferences   sp_myaccount = getSharedPreferences("userInfo", MODE_PRIVATE);
        String acc=   sp_myaccount.getString("share", "");
        System.err.println("uud: " + acc);
Toast.makeText(LocalFeed.this,"clicked",Toast.LENGTH_SHORT).show();
        ShareActionProvider  mShare= (ShareActionProvider)shareItem.getActionProvider();
        Intent ShareIntent=new Intent(Intent.ACTION_SEND);
        ShareIntent.setAction(Intent.ACTION_SEND);
        ShareIntent.setType("text/plain");
        ShareIntent.putExtra(Intent.EXTRA_TEXT, acc);
        mShare.setShareIntent(ShareIntent);
        return true;
    }

Заметил, что там тоже есть тостовое сообщение, и я могу подтвердить, что оно срабатывает только при первом событии Onclick. Вот как выглядит типичное предварительно заполненное сообщение введите описание изображения здесь

Я сделал еще несколько испытаний, и я уверен, что проблема с

  m.openOptionsMenu();

есть ли способ обновить это?

1 ответ

Решение

Вы должны использовать invalidateOptionsMenu, который заставит onCreateOptionsMenu быть вызванным снова. Это доступно начиная с уровня API 11.

Другие вопросы по тегам