###前提・実現したいこと
android初心者です。
画面上にタブを2つ用意し、ViewPagerを利用してスワイプでビューの切り替えが可能な状態にしています。
ここでやりたいことは以下の2つです。
- タブ1からタブ2に切り替えるとき、スワイプで切り替えるのではなく、タブ1のビューに設置しているボタンを押したときにも切り替えができるようにしたい。
- 上記の1.を実行するときに、Tab2Fragmentに適当な値を渡したい。(受け取った値をタブ2のテキストビューに表示させたい)
どちらもTab1Fragment#onclickに実装させたいのですが、良い方法が思いつきません。アドバイスをいただけないでしょうか。
###該当のソースコード
MainActivity.java
MainActivity.java
1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); 9 viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), 10 MainActivity.this)); 11 12 TabLayout tabLayout = (TabLayout)findViewById(R.id.tab_layout); 13 tabLayout.setupWithViewPager(viewPager); 14 viewPager.setCurrentItem(1); 15 } 16}
activity_main.xml
activity_main.xml
1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.example.a1.quizhtml.MainActivity" 11 android:background="#d1e7e2" 12 android:id="@+id/main"> 13 14 <android.support.design.widget.TabLayout 15 android:layout_width="match_parent" 16 android:layout_height="wrap_content" 17 android:id="@+id/tab_layout" 18 android:layout_alignParentTop="true" 19 android:layout_alignParentLeft="true" 20 android:layout_alignParentStart="true" /> 21 22 <android.support.v4.view.ViewPager android:id="@+id/viewPager" 23 android:layout_width="match_parent" 24 android:layout_height="match_parent" /> 25 26 27</RelativeLayout>
Tab1Fragment.java
Tab1Fragment.java
1public class Tab1Fragment extends Fragment { 2 3 @Override 4 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 5 6 View view = inflater.inflate(R.layout.tab1, container, false); 7 View.OnClickListener tab1ButtonClickListener = new View.OnClickListener() { 8 @Override 9 public void onClick(View v) { 10 // 悩みの種 11 12 } 13 }; 14 view.findViewById(R.id.tab1Button).setOnClickListener(tab1ButtonClickListener); 15 16 return view; 17 } 18 19}
tab1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tab1"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/tab1Button" android:layout_gravity="center_vertical" /> </LinearLayout>
Tab2Fragment.java
public class Tab2Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.tab2, container, false); return view; } }
tab2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tab2"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/tab2Text" android:nestedScrollingEnabled="true" android:layout_gravity="center_vertical" /> </LinearLayout>
ViewPagerAdapter.java
public class ViewPagerAdapter extends FragmentPagerAdapter { final int PAGE_COUNT = 2; private String tabTitles[] = new String[]{"Tab1", "Tab2"}; private Context context; public ViewPagerAdapter(FragmentManager fm, Context context) { super(fm); this.context = context; } @Override public int getCount() { return PAGE_COUNT; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new Tab1Fragment(); case 1: return new Tab2Fragment(); default: break; } return null; } @Override public CharSequence getPageTitle(int position) { return tabTitles[position]; } }
あなたの回答
tips
プレビュー