2014-05-20 10 views
5

Ho provato a scrivere un codice in Android, per passare da una scheda a un'altra scheda facendo clic su un pulsante.Come passare ad altre schede facendo clic su un pulsante dalla scheda corrente in Android?

Conoscendo la scheda, è possibile passare da una scheda all'altra, ma è possibile passare da una scheda a un'altra facendo clic su un pulsante.

Ho provato il seguente tutorial.

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

In questo tutorial ho modificato il file MovieFragment.java nel seguente modo.

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

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

Ho creato un pulsante nel layout xml e interruttore cercando di scheda -1, ma mi sto Null Pointer Eccezione.

Codice di errore:

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) 

Si prega di suggerire me qualche soluzione o qualche buona tecnica per farlo.

risposta

16

Dovete chiamare vista primaria all'interno del frammento.

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

Grande amico ... funziona in modo eccellente ... tu risparmi la mia giornata ... grazie mille ... – user2563306

+0

Grazie, getActivity è la soluzione !! – Jey10

+0

Grazie amico, mi ha aiutato molto. –

0

ViewPager è nullo perché non si sta inizializzando la variabile.

quello che devi fare

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

Niente è amico lavorando ... – user2563306

+0

è perché non si dispone di un ViewPager in XML, aggiungere un ViewPager in XML o controllare questo campione http://androidtrainningcenter.blogspot.mx/2012/10 /viewpager-example-in-android.html – Chefes

+0

Sì, ho modificato il mio codice XML e aggiunto un ViewPager nel codice xml ma non c'è nessun evento dopo aver cliccato sul pulsante ... per favore aiutatemi ... per favore passate il mio codice XML di nuovo ... – user2563306