【问题标题】:Display Android Toast message in FragmentStatePagerAdapter在 FragmentStatePagerAdapter 中显示 Android Toast 消息
【发布时间】:2017-12-23 08:47:46
【问题描述】:

我正在尝试在 FragmentStatePagerAdapter 中显示敬酒消息,但失败了。

我需要获取上下文以插入到我的代码中

Toast.makeText(, "The message", Toast.LENGTH_SHORT).show();

但我不能使用getContext()getActivity(),因为我没有任何onCreateView 方法,而且我不知道任何其他获取上下文的方法。

这是我的FragmentStatePagerAdapter 代码:

import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.widget.Toast;

import com.mobaleghan.tablighcalendar.view.fragment.PrayerListViewContainerFragment;
import com.mobaleghan.tablighcalendar.view.fragment.TablighDataTabFragment;

public class TabbedKnowledgeAdapter extends FragmentStatePagerAdapter {

    private int mNumOfTabs;
    private TabLayout tabLayout;

    public TabbedKnowledgeAdapter(FragmentManager fm, int NumOfTabs, TabLayout tabLayout) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
        this.tabLayout = tabLayout;

    }

    @Override
    public Fragment getItem(int position) {

        //Some codes

        Toast.makeText(, "the message", Toast.LENGTH_SHORT).show(); //I need context

        //Some other codes

    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}

那么我如何在FragmentStatePagerAdapter 中获取上下文?

【问题讨论】:

  • 试试tabLayout.getContext() 并提供反馈!
  • @Xenolion 成功了!
  • 在 FragmentStatePagerAdapter 构造函数中传递上下文。
  • 添加了一个答案@AlexJolig
  • 我不喜欢 PagerAdapter(视图数据的提供者)依赖于另一个视图(呈现数据的对象)的想法。

标签: android android-context fragmentstatepageradapter


【解决方案1】:

你可以使用:

tabLayout.getContext();

【讨论】:

  • 这就是解决方案!
【解决方案2】:

在构造函数中传递上下文

Context context;
public TabbedKnowledgeAdapter(FragmentManager fm, Context ctx, int NumOfTabs, TabLayout tabLayout) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
    this.tabLayout = tabLayout;
    this.context = ctx;

}

并在您的 Toast 中传递此上下文。

【讨论】:

  • 虽然这可行,但也增加了不必要的复杂性。包括 TabLayout 在内的所有视图都已经拥有一个可由 getContext() 访问的 Context 实例(Activity 或其派生类)。
【解决方案3】:

使用应用程序的上下文

例如

@Override
public Fragment getItem(int position) {

    //Some codes

    Toast.makeText(((SampleApplication)getApplication()).getApplicationContext(), "the message", Toast.LENGTH_SHORT).show(); //I need context

    //Some other codes

}

【讨论】:

  • PagerAdapters 没有getApplication 方法。
猜你喜欢
  • 2011-12-09
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多