2017-10-08 2 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); 
     } 

このListener変数をHomeFragmentクラスに設定します。

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

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に位置しています。リスナーを知らせるクリックonButton私はそれを私のメインの断片に入れ、上記のようにしましたが、クラッシュし、logcatに "mainactivityのリスナーを実装する必要がある"と言います。 だから私はそれを取り出してそれを実行したが、私はプレイリストをクリックした後もまだクラッシュした。それはjava.lang.NullPointerExceptionを示しています:nullオブジェクト参照でインタフェースメソッド 'void com.naman14.timber.fragments.HomeFragment $ Listener.onPlaylistButtonClicked()'を呼び出そうとしました – Alpoe

関連する問題