【问题标题】:how do i get my ShareActionProvider to submit text Dynamically (from listeners) view pagers etc我如何让我的 ShareActionProvider 动态提交文本(来自听众)查看寻呼机等
【发布时间】:2012-07-18 09:21:09
【问题描述】:

我用的是Sherlock Library Action Bar,和ICS的action bar差不多,卡住的地方是这个

    @Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add("Save")
    .setIcon(R.drawable.ic_compose).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    menu.add("Search")
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    SubMenu sub = menu.addSubMenu("Options");
    sub.add(0, SubMenu.NONE, 0, "First");
    sub.add(0,SubMenu.NONE, 1, "Second");
    sub.add(0, SubMenu.NONE, 2, "Three");
    sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    // HERE IS WHere I AM FACING PROBLEM IN
    getSupportMenuInflater().inflate(R.menu.share_action_provider, menu);
    // Set file with share history to the provider and set the share intent.
    actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar);
    ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
    actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); //this is BRILLIANT WAY TO AVOID REPEATation
    actionProvider.setShareIntent(createShareIntent());

    return super.onCreateOptionsMenu(menu);
}

private Intent createShareIntent() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");

    //THIS TEXT IS WHAT I WANT TO OBTAIN DYNAMICALLY
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Something goes here");
    return shareIntent;
}

每当我尝试将actionProvider.setShareIntent(createShareIntent()); 放入侦听器或actionProvider.setShareIntent(createShareIntent()); 以外的任何位置时,我都会得到D/View(11753): onTouchEvent: viewFlags is DISABLED

我希望包含此共享操作提供程序,并希望输入我自己在用户输入时生成的文本。

欢迎提出任何意见。

添加这个不起作用

    actionItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            Log.e("THIS IS NEVER CALLED", "??");
            return true;
        }
    });

如何获取被点击的共享按钮的更新

【问题讨论】:

    标签: android android-4.0-ice-cream-sandwich actionbarsherlock shareactionprovider


    【解决方案1】:

    我在 android.support.v7.app.ActionBarActivity 衍生品中遇到了类似的问题(尽管我认为这种方法应该适用于任何活动)并且我覆盖了 onPrepareOptionsMenu 并获得了您想要的效果:

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
        if (actionProvider != null) {
            actionProvider.setShareIntent(createShareIntent());
        }
        return super.onPrepareOptionsMenu(menu);
    }
    

    【讨论】:

      【解决方案2】:

      我使用这样的菜单:

      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
          case android.R.id.your_share_button_name:
              share();
              return true;
      
          }
      }
      
          private void share() {
          Intent sharingIntent = new Intent(Intent.ACTION_SEND);
          sharingIntent.setType("text/plain");
          sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,
                  "your text");
          sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                  "your subject");
          startActivity(Intent.createChooser(sharingIntent, "Share using"));
      }
      

      就是这样。我建议您将菜单的所有布局放在 res/menu 文件夹中的 xml 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        相关资源
        最近更新 更多