前提
androidのタブレイアウトについて質問します。
タブをレイアウトして、そこにボタンを1つずつ配置しました。このボタン一つ一つにクリックイベントをつけたいと思っています。しかし、ボタンをクリックしたときにどこにクリックイベントを書けばいいのか分かりません。mainに書けないのは、タブでmainも切り替えたいためです。
実現したいこと
ボタンが機能するタブをつける
発生している問題・エラーメッセージ
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
該当のソースコード
java(main.java)
1import androidx.appcompat.app.AppCompatActivity; 2import androidx.viewpager2.widget.ViewPager2; 3 4import android.os.Bundle; 5import android.view.View; 6import android.widget.Button; 7 8import com.google.android.material.tabs.TabLayout; 9import com.google.android.material.tabs.TabLayoutMediator; 10 11public class MainActivity extends AppCompatActivity { 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 17 String[] hposition = {"てすと1","てすと2"}; 18 ViewPager2 pager = (ViewPager2)findViewById(R.id.pager); 19 PageAdapter adapter = new PageAdapter(this); 20 pager.setAdapter(adapter); 21 TabLayout tabs = (TabLayout)findViewById(R.id.tab); 22 new TabLayoutMediator(tabs, pager, 23 (tab, position) -> tab.setText(hposition[position]) 24 ).attach(); 25 26// Button button1 = findViewById(R.id.button1); 27// button1.setOnClickListener((View v) -> { 28// System.out.println("aaaa"); 29// }); 30// Button button2 = findViewById(R.id.button2); 31// button2.setOnClickListener((View v) -> { 32// System.out.println("aaaa"); 33// }); 34 } 35}
java(PageAdapter.java)
1import androidx.annotation.NonNull; 2import androidx.fragment.app.Fragment; 3import androidx.viewpager2.adapter.FragmentStateAdapter; 4 5public class PageAdapter extends FragmentStateAdapter { 6 //アカウント用のタブ 7 8 public PageAdapter(MainActivity fragment) { 9 super(fragment); 10 } 11 /** 12 * 指定されたタブの位置(position) に対応するタブページ(Fragment)を作成する 13 */ 14 @NonNull 15 @Override 16 public Fragment createFragment(int position) { 17 Fragment fragment = null; 18 if (position == 0) { 19 fragment = new TestPager(); 20 } else if (position == 1) { 21 fragment = new Test1Pager(); 22 } 23 return fragment; 24 } 25 /** 26 * タブの数を返す 27 */ 28 @Override 29 public int getItemCount() { 30 return 2; 31 } 32}
java(test.java)
1import androidx.fragment.app.Fragment; 2 3import android.os.Bundle; 4import android.view.LayoutInflater; 5import android.view.View; 6import android.view.ViewGroup; 7 8public class TestPager extends Fragment { 9 10 public TestPager() { 11 } 12 public static TestPager newInstance() { 13 TestPager fragment = new TestPager(); 14 return fragment; 15 } 16 @Override 17 public void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 } 20 @Override 21 public View onCreateView(LayoutInflater inflater, ViewGroup container, 22 Bundle savedInstanceState) { 23 // Inflate the layout for this fragment 24 return inflater.inflate(R.layout.activity_test_pager, container, false); 25 } 26}
java(test1.java)
1import androidx.fragment.app.Fragment; 2 3import android.os.Bundle; 4import android.view.LayoutInflater; 5import android.view.View; 6import android.view.ViewGroup; 7 8public class Test1Pager extends Fragment { 9 10 public Test1Pager() { 11 } 12 public static Test1Pager newInstance() { 13 Test1Pager fragment = new Test1Pager(); 14 return fragment; 15 } 16 @Override 17 public void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 } 20 @Override 21 public View onCreateView(LayoutInflater inflater, ViewGroup container, 22 Bundle savedInstanceState) { 23 // Inflate the layout for this fragment 24 return inflater.inflate(R.layout.activity_test1_pager, container, false); 25 } 26}
xml(activity_main.xml)
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:gravity="center" 9 android:orientation="vertical" 10 android:padding="20dp" 11 tools:context=".MainActivity"> 12 13 <androidx.viewpager2.widget.ViewPager2 14 android:id="@+id/pager" 15 android:layout_width="0dp" 16 android:layout_height="0dp" 17 android:layout_weight="1" 18 app:layout_constraintBottom_toTopOf="@+id/tab" 19 app:layout_constraintEnd_toEndOf="parent" 20 app:layout_constraintStart_toStartOf="parent" 21 app:layout_constraintTop_toTopOf="parent" /> 22 23 <com.google.android.material.tabs.TabLayout 24 android:id="@+id/tab" 25 android:layout_width="match_parent" 26 android:layout_height="0dp" 27 app:layout_constraintBottom_toBottomOf="parent" 28 app:layout_constraintEnd_toEndOf="parent" 29 app:layout_constraintStart_toStartOf="parent" 30 app:tabSelectedTextColor="@color/teal_200" /> 31</androidx.constraintlayout.widget.ConstraintLayout>
xml(activity_test_pager.xml)
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".TestPager"> 8 9 <Button 10 android:id="@+id/button1" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="ボタン1" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18</androidx.constraintlayout.widget.ConstraintLayout>
xml(activity_test1_pager.xml)
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".Test1Pager"> 8 9 <Button 10 android:id="@+id/button2" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="ボタン2" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18</androidx.constraintlayout.widget.ConstraintLayout>
試したこと
ボタンを押したときにどこのactivityに行くのかを調べたけれど、どこにも入りませんでした。AppCompatActivityを継承しないとクリックイベントを追加できないと思うのでmain.javaしかないと思うのですが、そこに記述してしまうと、エラーが起こり、エラーを解消しても、メインのボタンが切り替えられなくなります。

回答1件
あなたの回答
tips
プレビュー