0

I have looked through multiple answers and tried their solutions, but I am still unable to get a toast to show in my application. I am working with a Fragment because my application has multiple tabs. Here is my code:

package edu.uah.smap.smapscanner.tabsswipe;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class Tab1Fragment extends ListFragment
{

@Override
public void onActivityCreated(Bundle savedInstanceState) 
{
    super.onActivityCreated(savedInstanceState);
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
        "Linux", "OS/2" };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
 }

@Override
  public void onListItemClick(ListView l, View v, int position, long id) {
    String item = (String) getListAdapter().getItem(position);
    Toast.makeText(getActivity(), item + " selected", Toast.LENGTH_LONG).show();
  }
}

In place of getActivity(), I have tried

  • getActivity().getActivityContext(),
  • Tab1Fragment.this.getActivity(), and
  • Tab1Fragment.this.getActivity().getActivityContext()

None of those have worked.

Here is the MainTabs activity code:

package edu.uah.smap.smapscanner;

import edu.uah.smap.smapscanner.tabsswipe.TabsPagerAdapter;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuInflater;

public class MainTabs extends FragmentActivity 
          implements ActionBar.TabListener
{
private ViewPager        m_viewPager;
private TabsPagerAdapter m_adapter;
private ActionBar        m_actionBar;

// Tab titles
private String[] tabs = { "Check-in/Check-out", "My Items", "Lab Inventory" };

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabs_main);

    // Initialization
    m_viewPager = (ViewPager) findViewById(R.id.pager);
    m_actionBar = getActionBar();
    m_adapter   = new TabsPagerAdapter(getSupportFragmentManager());

    m_viewPager.setAdapter(m_adapter);
    m_viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() 
    {
        @Override
        public void onPageSelected(int position) 
        {
            //on changing the page make the respected tab selected
            m_actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2)
        {

        }

        @Override
    public void onPageScrollStateChanged(int arg0) 
        {

    }
    });

    m_actionBar.setHomeButtonEnabled(false);
    m_actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Adding Tabs
    for (String tab_name : tabs) 
    {
   m_actionBar.addTab(m_actionBar.newTab().setText(tab_name).setTabListener(this));
    }
}

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
  } 

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
    // on tab selected show respected fragment view
    m_viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{

}

}
setherj
  • 91
  • 1
  • 11

2 Answers2

4

Try using getActivity().getApplicationContext()


Also, see this answer. There is a difference of when to use Activity context and when to use Application Context.

Use the Application Context when you leave the scope of the Activity. In certain cases you have to use the Activity Context or you will get exceptions, in others you should use the Application Context to avoid leaking the Activity context.

Community
  • 1
  • 1
rogcg
  • 10,451
  • 20
  • 91
  • 133
3

you can use getApplicationContext()

Toast.makeText(getApplicationContext(), "Your Message", Toast.LENGTH_LONG).show();
Md Rahman
  • 1,812
  • 1
  • 14
  • 15