簡體   English   中英

Android 片段監聽器 null object 參考

[英]Android fragment listener null object reference

您好,我正在嘗試向我的消息片段添加一個偵聽器,但由於某種原因,它給了我一個 null 指針異常。

我的片段


public class MessageFragment extends Fragment {

    OnItemSelectedListener Listener;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_message, container, false);


        List<String> dummyList = new ArrayList<>();

        for (int i = 0; i < DummyDataProvider.getDummyData().size(); i++) {
            dummyList.add(DummyDataProvider.getDummyData().get(i).getDummyData() +" "+ i);
        }

        ListView listView = (ListView) view.findViewById(R.id.messageFragmentListView);

        ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,dummyList);

        listView.setAdapter(listAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Listener.onItemSelectedMessageFragment(position);
            }
        });

        return view;
        //this method inflates my layout to the java class
    }


    public interface OnItemSelectedListener{
        public void onItemSelectedMessageFragment(int position);
    }

}


我已經像這樣在主要活動中實現了接口

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, MessageFragment.OnItemSelectedListener

這是我的超越

 @Override
    public void onItemSelectedMessageFragment(int position) {
        Toast.makeText(this, "this is the position" + position, Toast.LENGTH_SHORT).show();
    }

該片段可以很好地打印數據,但是當我單擊偵聽器時,它會引發異常

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: firebaseapp.com.mygbfapp, PID: 10995
    java.lang.NullPointerException: Attempt to invoke interface method 'void firebaseapp.com.mygbfapp.fragments.MessageFragment$OnItemSelectedListener.onItemSelectedMessageFragment(int)' on a null object reference
        at firebaseapp.com.mygbfapp.fragments.MessageFragment$1.onItemClick(MessageFragment.java:47)
        at android.widget.AdapterView.performItemClick(AdapterView.java:374)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1736)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:4207)
        at android.widget.AbsListView$7.run(AbsListView.java:6692)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8167)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
I/Process: Sending signal. PID: 10995 SIG: 9

我不確定為什么有人可以向我解釋這一點。

好吧,沒關系,我很愚蠢,聽眾沒有工作,因為我忘了覆蓋這個方法

 @Override
    public void onAttach(@NonNull Activity activity) {

        try {
            Listener = (OnItemSelectedListener) activity;
        }catch (ClassCastException e){
            throw new ClassCastException(activity.toString()+ "Must imlement on item selected listener.");
        }

        super.onAttach(activity);
    }

現在它工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM