2014-05-20 24 views
5

Próbuję napisać kod w Androidzie, aby przełączyć się z jednej karty na inną, klikając przycisk.Jak przejść do innych zakładek, klikając przycisk z bieżącej zakładki w systemie Android?

Wiem, klikając zakładkę, możemy przejść z jednej zakładki do drugiej, ale można przełączyć się z jednej zakładki na inną, klikając jeden przycisk.

Próbowałem następujący samouczek.

http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/

W tym poradniku mam edytowany plik MovieFragment.java w następujący sposób.

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; 
}} 

kod 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> 

Stworzyłem przycisk w układzie XML i przełącznik próbuje karcie -1 ale otrzymuję Null Pointer Wyjątek.

Kod błędu:

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) 

Proszę zasugerować mi jakieś rozwiązanie lub jakąś dobrą technikę, aby to zrobić.

Odpowiedz

16

Trzeba zadzwonić Zobacz główne wewnątrz fragmentu.

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; 
    } 

} 
+0

Świetny przyjaciel ... działa znakomicie .... oszczędzasz mój dzień ... wielkie dzięki ... – user2563306

+0

Dzięki, getActivity jest rozwiązaniem !! – Jey10

+0

Dziękuję kolego, bardzo mi to pomogło. –

0

Twoja ViewPager ma wartość null, ponieważ nie inicjalizujesz zmiennej.

Trzeba zrobić

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; 
}} 
+0

Nic nie jest przyjaciel pracuje ... – user2563306

+0

Czy dlatego, że nie mają ViewPager w formacie XML, dodać ViewPager w formacie XML lub sprawdzić tę próbkę http://androidtrainningcenter.blogspot.mx/2012/10 /viewpager-example-in-android.html – Chefes

+0

Tak, edytowałem swój kod XML i dodałem ViewPager w kodzie xml, ale po kliknięciu przycisku nie ma żadnego zdarzenia ... proszę, pomóż mi ... proszę przejść mój kod XML ponownie ... – user2563306