简体   繁体   English

如何使用按钮从片段中切换标签?

[英]How to switch tabs from a fragment using a button?

I have a tabbed Activity with several tab Fragments . 我有一个带有几个选项卡Fragments的选项卡Activity (like artists, playlists, albums). (例如艺术家,播放列表,专辑)。 I want to add a buttons to my home Fragment that will navigate to the other tabs after being click. 我想在主页Fragment中添加一个按钮,单击后将导航到其他选项卡。 For example: i click on playlists and it takes me 3 tabs over to playlists. 例如:我单击播放列表,这将我带3个标签转到播放列表。 I have no Idea how to go about this. 我不知道该怎么做。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(
            R.layout.fragment_home, container, false);
    playlists = (Button) rootView.findViewById(R.id.playlists);
    playlists.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //getActivity().getTabHost().setCurrentTabByTag("TAB2");
            //viewPager.setCurrentItem(2);


        }
    });


    return rootView;
}

在此处输入图片说明

Declare an interface in HomeFragment and declare listener variable 在HomeFragment中声明一个接口并声明侦听器变量

private HomeFragmentActionListener mListener;

    public interface HomeFragmentActionListener { 
            void onButtonClick(int pos);
        }

set this listener variable in HomeFragment class. 在HomeFragment类中设置此侦听器变量。

public void setListener(
            HomeFragmentActionListener listener) {
        mListener = listener;
    }

and onButton click inform the listener 和onButton单击通知侦听器

playlists.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //getActivity().getTabHost().setCurrentTabByTag("TAB2");
            //viewPager.setCurrentItem(2);
          mListener.onButtonClick(2);
        }
    });

Implement this interface under MainFragment 在MainFragment下实现此接口

public class MainFragment extends Fragment {

 private class HomeFragmentListener implements HomeFragment.HomeFragmentActionListener {
public void onButtonClick(int pos) {
 //Change the tabs.
}
}
and set the listener in setupviewpager
private void setupViewPager(ViewPager viewPager) { 
Adapter adapter = new Adapter(getChildFragmentManager()); 
HomeFragment homeFragment = new HomeFragment(); 
homeFragment.setListener( new HomeFragmentListener()); 
adapter.addFragment(homeFragment, this.getString(R.string.Homecap)); 
.. 

You need to notify the parent activity via callback: 您需要通过回调通知父活动:

public class MainActivity extends AppCompatActivity implements HomeFragment.Listener {

    private ViewPager viewPager;
    ...

    @Override
    public void onPlaylistButtonClicked() {
        // Show playlist tab (assuming playlist is the third tab).
        viewPager.setCurrentItem(2);
    }
}

And your fragment: 和你的片段:

public class HomeFragment extends Fragment {

    private Listener callback;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        // This makes sure that the container activity has implemented the callback interface.
        try {
            callback = (Listener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement Listener");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(
                R.layout.fragment_home, container, false);
        playlists = (Button) rootView.findViewById(R.id.playlists);
        playlists.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callback.onPlaylistButtonClicked();
            }
        });

        return rootView;
    }

    public interface Listener {
        void onPlaylistButtonClicked();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM