2017-10-08 83 views
0

我有一个标签Activity与几个标签Fragments。 (如艺术家,播放列表,专辑)。我想添加一个按钮到我的家Fragment,点击后将导航到其他标签。例如:我点击播放列表,然后将3个选项卡放到播放列表中。我不知道如何去做这件事。如何使用按钮切换片段中的选项卡?

@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; 
} 

enter image description here

回答

1

声明一个接口HomeFragment并宣布听者变量

private HomeFragmentActionListener mListener; 

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

在HomeFragment类中设置此监听器变量。

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

和onButton单击通知监听

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

实现此接口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)); 
.. 
+0

homeFragment.setListener(new HomeFragmentListener() );因为它还没有在 – Alpoe

+0

之前的其他地方创建过@ @ Alpoe不,它应该可以工作。 –

+0

错误 - 无法解析符号HomeFragmentListener。没关系,似乎没有任何工作,所以我认为生病就放弃了。 – Alpoe

0

你需要通过回调来通知父活动:

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

而且你的片段:

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

我看来寻呼机位于我MainFragment不MainActivity下。我把它放在我的主要片段中,如上所示,但它崩溃,在logcat中它说“必须在mainactivity中实现监听器”。 所以我拿出并运行它,但它仍然坠毁后,我点击播放列表。它说java.lang.NullPointerException:试图调用空对象的接口方法'void com.naman14.timber.fragments.HomeFragment $ Listener.onPlaylistButtonClicked()'参考 – Alpoe

相关问题