2017-02-07 10 views
0

私は質問があります。ツールバーのボタンをonclickし、別の2つのtablayoutフラグメントでメッセージを表示すると、それは可能ですか?たとえば、下のツールバーのボタンテストをクリックすると、別の2つのフラグメントテキストビューがテキストで表示されます。Android:ツールバー内のボタンonclick別の2つのtablayoutにメッセージを表示

MainActivity

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener{ 

private TabLayout tabLayout; 
private ViewPager viewPager; 
int ans =3; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

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

    BasePagerAdapter adapter = new BasePagerAdapter(getSupportFragmentManager()); 
    Tab1 tab1 = new Tab1(); 
    Tab2 tab2 = new Tab2(); 


    adapter.addFragment(tab1, "1"); 
    adapter.addFragment(tab2, "2"); 


    viewPager = (ViewPager) findViewById(R.id.pager); 

    viewPager.setAdapter(adapter); 

    tabLayout.setOnTabSelectedListener(this); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setupWithViewPager(viewPager); 

} 

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

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 
public class BasePagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 
    public BasePagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 


    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 


    public void removeFragment(int position) { 
     mFragmentTitleList.remove(position); 
     mFragmentList.remove(position); 
     notifyDataSetChanged(); 

    } 
    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 
    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 

} 

Tab1を

public class Tab1 extends Fragment { 



EditText editext,editext2,editext3; 
Button test; 
DBController db; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View h = inflater.inflate(R.layout.tab1, container, false); 

    editext =(EditText)h.findViewById(R.id.editText); 
    editext2 =(EditText)h.findViewById(R.id.editText2); 
    editext3 =(EditText)h.findViewById(R.id.editText3); 



    return h; 
} 

TAB2

public class Tab2 extends Fragment { 
TextView textView2; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View h = inflater.inflate(R.layout.tab2, container, false); 
    textView2 = (TextView) h.findViewById(R.id.textView2); 

    return h; 
} 

答えて

0

私は、疑問を持っているツールバーのボタンをonclickのかつ迅速なときには、それを作ることが可能です別の2つのタブレイアウトフラグメントのメッセージ

回答:YES

どのように?

よく、interfaceを使用して解決策です。しかし、むしろクラスを疎結合にしておき、EventBusを使用すると、イベントとして他のクラスにデータをシームレスに渡すことができます。

コンポーネント間のパブリッシュ/サブスクライブ形式の通信に続いて、コンポーネントが明示的に相互に登録する必要がなく(したがって相互に注意する必要がありません)。これは、明示的な登録を使用して、従来のJavaインプロセスイベント配信を置き換えるためにのみ設計されています。

このAnswer

+0

感謝を参照して、使用状況を表示するには、イベントバスについての簡単なチュートリアルはありますか? –

+0

答えに記載されているとおり、これは今まで私が見つけた最も簡単なものです:http://www.andreas-schrade.de/2015/11/28/android-how-to-use-the-greenrobot-eventbus/ – OBX

+0

ちょっと古いので、最新のバージョン – OBX

関連する問題