[英]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.