【问题标题】:Get Text/Title of Tab inside Fragment Java in Android在 Android 的 Fragment Java 中获取选项卡的文本/标题
【发布时间】:2016-06-21 16:45:09
【问题描述】:

如何在 TopFreeFragment.java 中获取 Tab 的文本/标题?

我想知道选择了哪个选项卡并相应地加载 webview。我该怎么做?

我尝试过使用 sharedPreferences 但这不是正确的方法,也不能正常工作。

这里我想在 TopFreeFragment.java 中显示标签标题的 Toast

public class YouTube_Toolbar extends AppCompatActivity {

Toolbar toolbar;
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter viewPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.you_tube__toolbar);

    toolbar = (Toolbar) findViewById(R.id.toolBar);
    setSupportActionBar(toolbar);

    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    viewPager = (ViewPager) findViewById(R.id.viewPager);

    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragments(new TopFreeFragment(), "TUESDAY");
    viewPagerAdapter.addFragments(new TopFreeFragment(), "WEDNESDAY");
    viewPagerAdapter.addFragments(new TopFreeFragment(), "THURSDAY");
    viewPagerAdapter.addFragments(new TopFreeFragment(), "FRIDAY");
    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

 public class TopFreeFragment extends Fragment {

WebView webView;
Button download;

public TopFreeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)

    return inflater.inflate(R.layout.fragment_top_free, container, false);
}
 }

【问题讨论】:

    标签: android android-fragments android-fragmentactivity android-tabs


    【解决方案1】:

    我会在您的 Fragment 中编写一个 newInstance() 方法和一个 getTitle() 方法,并通过 Bundle 传递名称。

    类似这样的:

    TopFreeFragment.java

    public class TopFreeFragment extends Fragment {
        WebView webView;
        Button download;
    
        public TopFreeFragment() {
            // Required empty public constructor
        }
    
        public static TopFreeFragment newInstance(String title) {
            TopFreeFragment fragment = new TopFreeFragment();
    
            Bundle args = new Bundle();
            args.putCharSequence("title", title);
            fragment.setArguments(args);
    
            return fragment;
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState)
    
            return inflater.inflate(R.layout.fragment_top_free, container, false);
        }
    
        public String getTitle() {
            Bundle args = getArguments();
            return args.getCharSequence("title", "NO TITLE FOUND");
        }
    }
    

    然后像这样将片段添加到您的viewPagerAdapter

    YouTube_Toolbar.java

    public class YouTube_Toolbar extends AppCompatActivity {
    
        Toolbar toolbar;
        TabLayout tabLayout;
        ViewPager viewPager;
        ViewPagerAdapter viewPagerAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.you_tube__toolbar);
    
            toolbar = (Toolbar) findViewById(R.id.toolBar);
            setSupportActionBar(toolbar);
    
            tabLayout = (TabLayout) findViewById(R.id.tabLayout);
            viewPager = (ViewPager) findViewById(R.id.viewPager);
    
            viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
            viewPagerAdapter.addFragments(TopFreeFragment.newInstance("TUESDAY"), "TUESDAY");
            viewPagerAdapter.addFragments(TopFreeFragment.newInstance("WEDNESDAY"), "WEDNESDAY");
            viewPagerAdapter.addFragments(TopFreeFragment.newInstance("THURSDAY"), "THURSDAY");
            viewPagerAdapter.addFragments(TopFreeFragment.newInstance("FRIDAY"), "FRIDAY");
            viewPager.setAdapter(viewPagerAdapter);
    
            tabLayout.setupWithViewPager(viewPager);
            tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                }
    
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
    
                }
    
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
    
                }
            });
    }
    

    要从片段中获取片段的标题,只需调用getTitle()。您可以将任何您想要的标题作为newInstance(String title) 方法的参数传递。

    【讨论】:

    • 它部分工作 public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String title = getTitle(); Toast.makeText(getActivity(), ""+title, Toast.LENGTH_SHORT).show(); } 这里 toast 在选择选项卡时提供 2 个输出(比如这里的 "TUESDAY" & "WEDNESDAY" )
    • 哪个部分不工作?尝试将该代码添加到 onCreateView() 方法而不是 onActivityCreated()
    • onCreateView()中的情况也是如此
    • 再次,究竟是什么不工作?你能告诉我一些输出或你的代码之类的吗?如果没有更多信息,很难调试。你能告诉我你的viewPagerAdapter 代码吗?
    【解决方案2】:

    尝试传入包标题名称并进入onAttah() 回调方法并在您的片段中使用它。 ViewPagerAdapter类代码

    Fragment fragment = new ViewOrderTabFragment();
            Bundle args = new Bundle();
            args.putString("title","tabOne");
            fragment.setArguments(args);
    

    像这样在Fragment(ViewOrderTabFragment) 中获取标题

    String tabName="";
    @Override
    public void onAttach(@NonNull Context context) {
        if (getArguments()!=null) {
            tabName=getArguments().getString("position", "");
        }
        super.onAttach(context);
    }
    

    注意:当我们有具有相同片段的动态标签时,这将有助于我们记录

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2012-08-24
      • 2014-02-17
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多