while working with the action bar i have added a share item in overflow button when i added an icon to this its shows this exception error
import android.content.Intent; import android.support.design.widget.NavigationView; import android.support.v4.app.FragmentTransaction; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.ShareActionProvider; public class MainActivity extends AppCompatActivity { private ShareActionProvider mShareActionProvider; DrawerLayout drawerLayout; ActionBarDrawerToggle actionBarDrawerToggle; Toolbar toolbar; FragmentTransaction fragmentTransaction; NavigationView navigationView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close); navigationView = (NavigationView) findViewById(R.id.navigation_view); navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.home_id: fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.main_container, new HomeFragment()); fragmentTransaction.commit(); getSupportActionBar().setTitle("Home Fragment"); item.setChecked(true); drawerLayout.closeDrawers(); break; case R.id.message_id: fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.main_container, new FatCalculator()); fragmentTransaction.commit(); getSupportActionBar().setTitle("Fat"); item.setChecked(true); drawerLayout.closeDrawers(); break; case R.id.setting_id: fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.main_container, new FoodCalculator()); fragmentTransaction.commit(); getSupportActionBar().setTitle("Food"); item.setChecked(true); drawerLayout.closeDrawers(); break; case R.id.storage_id: fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.main_container, new FoodStorage()); fragmentTransaction.commit(); getSupportActionBar().setTitle("Storage"); item.setChecked(true); drawerLayout.closeDrawers(); break; case R.id.rate_id: fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.main_container, new RateME()); fragmentTransaction.commit(); getSupportActionBar().setTitle("Rate"); item.setChecked(true); drawerLayout.closeDrawers(); break; } return true; } }); drawerLayout.setDrawerListener(actionBarDrawerToggle); fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.main_container, new HomeFragment()); fragmentTransaction.commit(); getSupportActionBar().setTitle("Home"); }
i have added these lines of codes for inflating menu
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); // Locate MenuItem with ShareActionProvider MenuItem item = menu.findItem(R.id.Share_id); // Fetch and store ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider(); return true; } // Call to update the share intent private void setShareIntent(Intent shareIntent) { if (mShareActionProvider != null) { mShareActionProvider.setShareIntent(shareIntent); } }
above lines
@Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); actionBarDrawerToggle.syncState(); } }
menu file is here
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/setting_id" android:title="Setting" app:showAsAction="always" /> <item android:id="@+id/About_id" android:title="About" app:showAsAction="always" /> <item android:id="@+id/Contact_id" android:title="Conttact" app:showAsAction="never" /> <item android:id="@+id/Share_id" android:title="" android:icon="@drawable/share" app:showAsAction="always" android:actionProviderClass= "android.widget.ShareActionProvider" /> </menu>
logcat
java.lang.UnsupportedOperationException: This is not supported,use MenuItemCompat.getActionProvider() at android.support.v7.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:645) at com.example.rajafarid.navigation.MainActivity.onCreateOptionsMenu(MainActivity.java:110) at android.app.Activity.onCreatePanelMenu(Activity.java:2921) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:341) at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:258) at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85) at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:454) at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
No comments:
Post a Comment