我已经找了三四天关于这个问题的解决方案。我已经尝试过了:Null Pointer exception in using support library share action provider或why MenuItemCompat.getActionProvider returns null?以及其他一些,但在ShareActionProvider上仍然是空的。我在开发android应用程序方面很新,所以我真的需要一些帮助。
我的xml菜单文件是:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_share"
android:title="@string/action_share"
app:showAsAction="always"
android:icon="@android:drawable/ic_menu_share"
android:actionProviderClass="android.support.v7.widget.ShareActionProvider"/></menu>我的片段是:
public static class DailyActivityFragment extends Fragment {
private static final String LOG_TAG = "Dailyshare";
private ShareActionProvider mShareActionProvider;
public DailyActivityFragment() {
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_detail, container, false);
return rootView;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
inflater.inflate(R.menu.detailfragment, menu);
MenuItem item = menu.findItem(R.id.action_share);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(createShareIntent());
}else{
Log.i(LOG_TAG, "is null");
}
}
private Intent createShareIntent() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,
"this text will be shared");
return shareIntent;
}
}作为一种进口,我有:
import android.support.v7.widget.ShareActionProvider;发布于 2014-08-02 10:51:18
您只需创建一个ShareActionProvider并分配它。
mShareActionProvider = new ShareActionProvider();
mShareActionProvider.setShareIntent(createShareIntent())
MenuItemCompat.setActionProvider(item, mShareActionProvider);发布于 2015-09-16 08:09:48
XML中的命名空间使用错误:
应该是app__:actionProviderClass (提供者类来自apk资源,而不是本地android类)。
https://stackoverflow.com/questions/25093706
复制相似问题