【问题标题】:Android photo gallery安卓照片库
【发布时间】:2017-02-19 01:50:40
【问题描述】:

我创建了一个带有片段和画廊片段的应用程序,每当我打开该片段时它就会关闭。

以下是代码:

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

和编码:

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

}

日志:

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.

我想创建一个包含一个画廊和 Imageview 的照片画廊。在图库中,它将显示可绘制文件夹中名称为 img0、img1、img2 等的所有图像......并且所选图像将显示在图像视图上。

请有人帮我解决这个问题。

谢谢:)

【问题讨论】:

    标签: android android-imageview


    【解决方案1】:

    您可以先膨胀视图并从膨胀视图中获取项目。然后返回您膨胀的视图。鉴于错误日志上的空指针异常,以下应该可以工作。

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

    【讨论】:

    • 它解决了我的问题。非常感谢:) @Bayou
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多