2016-05-12 1 views
1

私のフラグメント(3つ)を保持してナビゲートするためのTabLayoutとViewPagerがありますが、それはうまくいきますが、ボタンのクリックなどの各フラグメントとどのようにやり取りするのか混乱しています編集することができます。ここに私の主な活動のXMLがあります。フラグメントとそのアクティビティについての混乱

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<android.support.design.widget.TabLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/tabLayout" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:background="@color/colorPrimary" 
    app:tabMode="fixed" 
    app:tabGravity="fill" /> 

<android.support.v4.view.ViewPager 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/viewPager" 
    android:layout_centerHorizontal="true" 
    android:layout_below="@+id/tabLayout" /> 

</RelativeLayout> 

これはそのためのアクティビティです。

public class ActivityMain extends AppCompatActivity { 

private String tabTitles[] = new String[] { "contacts", "home", "search" }; 

TabLayout tabLayout; 
ViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 

    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPager.setAdapter(new CustomAdapater(getSupportFragmentManager(),getApplicationContext())); 

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

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 
    }); 

} 

private class CustomAdapater extends FragmentPagerAdapter { 

    private String fragments [] = {"contacts", "home", "search"}; 

    public CustomAdapater(FragmentManager supportFragmentManager, Context applicationContext) { 
     super(supportFragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 0: 
       return new FragmentContacts(); 
      case 1: 
       return new FragmentMain(); 
      case 2: 
       return new FragmentSearch(); 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return fragments.length; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Generate title based on item position 
     return tabTitles[position]; 
    } 
} 
} 

そしてここに断片活性がある。

public class FragmentSearch extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    return inflater.inflate(R.layout.fragment_search,container,false); 
} 
} 

は今、私はそれのためにonclicklistenerを設定するのですか私のR.layout.fragment_searchで、私は、ちょうど例のためにボタンを持っていたと言いますか?それはFragmentSearchまたはActivityMain内にありますか?私は周りを検索しましたが、私はちょっと混乱しています。

答えて

1

あなたのような何かをすることによって、フラグメントのonCreateView方法であなたのonClickListenerを設定したい:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment1, container, false); 
    myButton = (Button) rootView.findViewById(R.id.buttonId); 
    myButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on click 
     } 
    }); 
    return rootView; 
    } 

あなたが見ることができるようにすべてが、onClickListenerについて同じです。唯一の違いは、適切なコンポーネント(ボタン、テキストビューなど)を見つけるためにそのビューを表示して使用するために膨らませなければならない点です。

1

ここで、フラグメント間で通信したい場合は、基本的なやり方は、あなたのアクティビティによって実装されるインターフェイスを使用することです。各フラグメントはアクティビティ内でそれらのメソッドを呼び出すことができます。

OttoやEventBusなどのメッセージングライブラリもありますが、断片だけでなくサービスも提供して素晴らしいです。

関連する問題