Как перейти на другие вкладки, нажав кнопку с текущей вкладки в Android?

Я пытаюсь написать код на Android, чтобы перейти с одной вкладки на другую вкладку, нажав на кнопку.

Я знаю, нажав на вкладку, мы можем переключаться с одной вкладки на другую, но можно ли переключиться с одной вкладки на другую, нажав на одну кнопку.

Я попробовал следующий учебник.

Android Tab Layout with Swipeable Views

В этом уроке я отредактировал файл MovieFragment.java следующим образом.

MovieFragment.java

package info.androidhive.tabsswipe; import info.androidhive.tabsswipe.R; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class MoviesFragment extends Fragment { ViewPager viewPager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_movies, container, false); Button btn = (Button) rootView.findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(0); } }); return rootView; }} 

Код XML:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#17df0d"> <android.support.v4.view.ViewPager android:id="@+id/myfivepanelpager" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Design Movies Screen" android:textSize="20dp" android:layout_centerInParent="true"/> <Button android:id="@+id/btn" android:layout_width="100dp" android:layout_height="80dp" android:text="Click" /> </RelativeLayout> 

Я создал кнопку в макете xml и попытаюсь переключиться на tab -1, но я получаю исключение Null Pointer.

Код ошибки:

 05-20 09:07:10.995: E/AndroidRuntime(1117): FATAL EXCEPTION: main 05-20 09:07:10.995: E/AndroidRuntime(1117): java.lang.NullPointerException 05-20 09:07:10.995: E/AndroidRuntime(1117): at info.androidhive.tabsswipe.MoviesFragment$1.onClick(MoviesFragment.java:33) 05-20 09:07:10.995: E/AndroidRuntime(1117): at android.view.View.performClick(View.java:4240) 05-20 09:07:10.995: E/AndroidRuntime(1117): at android.view.View$PerformClick.run(View.java:17721) 05-20 09:07:10.995: E/AndroidRuntime(1117): at android.os.Handler.handleCallback(Handler.java:730) 05-20 09:07:10.995: E/AndroidRuntime(1117): at android.os.Handler.dispatchMessage(Handler.java:92) 05-20 09:07:10.995: E/AndroidRuntime(1117): at android.os.Looper.loop(Looper.java:137) 05-20 09:07:10.995: E/AndroidRuntime(1117): at android.app.ActivityThread.main(ActivityThread.java:5103) 05-20 09:07:10.995: E/AndroidRuntime(1117): at java.lang.reflect.Method.invokeNative(Native Method) 05-20 09:07:10.995: E/AndroidRuntime(1117): at java.lang.reflect.Method.invoke(Method.java:525) 05-20 09:07:10.995: E/AndroidRuntime(1117): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 05-20 09:07:10.995: E/AndroidRuntime(1117): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-20 09:07:10.995: E/AndroidRuntime(1117): at dalvik.system.NativeStart.main(Native Method) 

Пожалуйста, предложите мне какое-нибудь решение или какую-нибудь хорошую технику.

Вы должны вызвать родительский вид внутри вашего фрагмента.

 public class MoviesFragment extends Fragment { ViewPager viewPager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_movies, container, false); Button btn = (Button) rootView.findViewById(R.id.btn); viewPager = (ViewPager) getActivity().findViewById(R.id.pager); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(0); } }); return rootView; } } 

Ваш ViewPager имеет значение null, потому что вы не инициализируете переменную.

Вам нужно сделать

 public class MoviesFragment extends Fragment { ViewPager viewPager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_movies, container, false); Button btn = (Button) rootView.findViewById(R.id.btn); viewPager = (ViewPager) rootView.findViewById(R.id.some_viewpager);//Initializing btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(0); } }); return rootView; }}