2017-02-18 3 views
0

Ich habe eine Anwendung mit Fragmenten und auf Galeriefragment erstellt, wann immer ich dieses Fragment öffne, wird es geschlossen.Android Fotogalerie

folgenden ist der Code:

.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    tools:context="junagadh.pkmcollege.com.pkmcollege.bscFragment"> 

    <Gallery 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/gallery1" 
     /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_marginTop="25dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView1" 
     /> 



</LinearLayout> 

und Codierung:

public class bscFragment extends Fragment { 

    int img[] = new int[5]; 
    public bscFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     for(int i=0;i<img.length;i++) { 
      img[i]=getResources().getIdentifier("img"+i,"drawable",getActivity().getPackageName()); 
     } 

     final ImageView iv=(ImageView)getView().findViewById(R.id.imageView1); 
     iv.setImageResource(img[0]); 

     Gallery gal=(Gallery)getView().findViewById(R.id.gallery1); 
     gal.setAdapter(new ImageAdapter(getActivity())); 
     gal.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { 
       iv.setImageResource(img[pos]); 
      } 
     }); 

     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_bsc, container, false); 
    } 

    public class ImageAdapter extends BaseAdapter 
    { 
     Context c; 
     public ImageAdapter(Context c){ 
      this.c=c; 
     } 


     @Override 
     public int getCount() { 
      return img.length; 
     } 

     @Override 
     public Object getItem(int arg0) { 
      return arg0; 
     } 

     @Override 
     public long getItemId(int arg0) { 
      return arg0; 
     } 

     @Override 
     public View getView(int pos, View arg1, ViewGroup arg2) { 
      ImageView iv=new ImageView(c); 
      iv.setImageResource(img[pos]); 
      iv.setLayoutParams(new Gallery.LayoutParams(120,150)); 
      iv.setScaleType(ImageView.ScaleType.FIT_XY); 
      return iv; 
     } 
    } 

} 

Logs:

I/OpenGLRenderer: Initialized EGL, version 1.4 
E/EGL_emulation: tid 3280: eglSurfaceAttrib(1165): error 0x3009 (EGL_BAD_MATCH) 
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa237f040, error=EGL_BAD_MATCH 
D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: junagadh.pkmcollege.com.pkmcollege, PID: 3263 
        java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
         at junagadh.pkmcollege.com.pkmcollege.bscFragment.onCreateView(bscFragment.java:34) 
         at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
         at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
         at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757) 
         at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355) 
         at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) 
         at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) 
         at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5417) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
I/Process: Sending signal. PID: 3263 SIG: 9 
Application terminated. 

ich eine Foto-Galerie erstellen möchten mit eine Galerie und Imag Überblick In der Galerie werden alle Bilder aus dem ziehbaren Ordner mit den Namen img0, img1, img2 usw. angezeigt und das ausgewählte Bild wird in der Bildansicht angezeigt.

Jemand hilf mir bitte dieses Problem zu lösen.

Thanks :)

Antwort

1

Sie zuerst die Ansicht aufblasen kann und die Elemente aus aufgeblasenen Aussicht. Dann gib die Ansicht zurück, die du aufgeblasen hast. Angesichts der Nullzeiger-Ausnahme im Fehlerprotokoll sollte Folgendes funktionieren.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.fragment_bsc, container, false); 
    for(int i=0;i<img.length;i++) { 
     img[i]=getResources().getIdentifier("img"+i,"drawable",getActivity().getPackageName()); 
    } 

    final ImageView iv=(ImageView)view.findViewById(R.id.imageView1); 
    iv.setImageResource(img[0]); 

    Gallery gal=(Gallery)view.findViewById(R.id.gallery1); 
    gal.setAdapter(new ImageAdapter(getActivity())); 
    gal.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { 
      iv.setImageResource(img[pos]); 
     } 
    }); 

    return view; 
} 
+0

Es behob mein Problem. Vielen Dank :) @Bayou –

+0

Nicht zu erwähnen. Froh, dass es funktioniert hat. Glückliche Kodierung !! – Bayou