当我在片段中的按钮上使用单击侦听器时,应用程序崩溃

时间:2018-11-15 15:08:21

标签: android android-fragments android-viewpager

我在MainActivity中使用了ViewPager,它扩展了AppCompatActivity。当我删除setOnClickListener时,它不会崩溃,但是当我设置Click listener时,它在给定日志时崩溃。

这是日志,但我仍然不明白为什么会发生

 --------- beginning of crash
2018-11-15 20:26:51.814 1654-1654/com.example.suraj.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.suraj.myapplication, PID: 1654
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
        at android.widget.Toast.<init>(Toast.java:104)
        at android.widget.Toast.makeText(Toast.java:262)
        at com.example.suraj.myapplication.ThirdFragment.onClick(ThirdFragment.java:56)
        at android.view.View.performClick(View.java:5637)
        at android.view.View$PerformClick.run(View.java:22429)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

我尝试了很多次,但是仍然无法正常工作。我的片段代码为

package com.example.sdgh.myapplication;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

public class ThirdFragment extends Fragment implements View.OnClickListener{
    ImageView ig3;
    View view;
    Context mContext;
    Button b;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       /* ViewGroup rootview3 = (ViewGroup)inflater.inflate(R.layout.third_frag,container,false);
       ImageView ig3 = (ImageView)rootview3.findViewById(R.id.thirdimage);
      // Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(ig3);
       container.addView(rootview3);

       return rootview3;*/

       view = inflater.inflate(R.layout.third_frag,container,false);
       ig3 = (ImageView)view.findViewById(R.id.thirdimage);
       b = (Button)view.findViewById(R.id.thirdbutton);
       Picasso.get().load("https://cloudinary.com/images//da2fd17643796658bb733d1c848454590aa303cd/developeour-list.png").into(ig3);
       b.setOnClickListener(this);
       container.addView(view);

       return view;
    }

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.thirdbutton:
                    Toast.makeText(mContext,"Third button clicked",Toast.LENGTH_SHORT).show();
                    break;
            }
            //Toast.makeText(mContext,"Onclicked",Toast.LENGTH_SHORT).show();
        }

    public static ThirdFragment newInstance(String text) {
        ThirdFragment f = new ThirdFragment();
        Bundle b = new Bundle();
        b.putString("msg", text);
        f.setArguments(b);
        return f;
    }
}

1 个答案:

答案 0 :(得分:0)

您忘记了初始化变量mContext。

Toast.makeText(mContext,"Third button clicked",Toast.LENGTH_SHORT).show();

您可以像这样使用getContext()或getActivity():

Toast.makeText(getContext(),"Third button clicked",Toast.LENGTH_SHORT).show();

Toast.makeText(getActivity(),"Third button clicked",Toast.LENGTH_SHORT).show();