【问题标题】:Toast in Fragment not showing片段中的吐司未显示
【发布时间】:2014-04-22 23:00:24
【问题描述】:

我查看了多个答案并尝试了他们的解决方案,但我仍然无法在我的应用程序中显示祝酒词。我正在使用片段,因为我的应用程序有多个选项卡。这是我的代码:

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();
  }
}

代替getActivity(),我试过了

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

这些都不起作用。

这是 MainTabs 活动代码:

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)
{

}

}

【问题讨论】:

  • 您使用了什么类型的活动,您也可以发布您的活动代码
  • 试试这个 -> Toast.makeText(getActivity(), item + " selected", Toast.LENGTH_LONG).show();
  • 我已经单独尝试了 getActivity(),抱歉我的问题有误。
  • 我不知道我在使用什么活动,在哪里可以找到?
  • @setherj 你在扩展活动吗?还是框架活动?

标签: android android-fragments android-toast


【解决方案1】:

尝试使用getActivity().getApplicationContext()


另外,请参阅this answer。何时使用 Activity 上下文和何时使用 Application Context 是有区别的。

当您离开Activity 的范围时,使用Application Context。在某些情况下你必须使用 Activity Context 否则你会得到异常,在其他情况下你应该使用 Application Context 以避免泄漏Activity 上下文。

【讨论】:

    【解决方案2】:

    你可以使用 getApplicationContext()

    Toast.makeText(getApplicationContext(), "Your Message", Toast.LENGTH_LONG).show();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多