我的适配器上调用notifyDataSetChanged()这是一个ListFragment内导致N

2019-10-19 15:36发布

介绍:

我有以下设置:

  1. MainActivity与方法onNewIntentprocessNewIntent ,所述MainActivity还实现FragmentActivity ; 并具有它实现了一个选项卡式片段FragmentList

  2. 一个listaddactivity创建一个新的活动Parcelable listControlObject

  3. 所述listaddactivity活动发送携带包裹,然后重建的内部的listControlObject意图MainActivityonNewIntentprocessNewIntent类。

  4. 然而; 我可以在intent进入我onNewIntent方法,它构建了新的listControlObject罚款; 但是当我调用adapter.notifyDataSetChanged方法对我FragmentList类。

logcat的错误:

03-24 04:18:44.149: E/Trace(16964): error opening trace file: No such file or directory (2)
03-24 04:18:49.543: E/AndroidRuntime(16964): FATAL EXCEPTION: main
03-24 04:18:49.543: E/AndroidRuntime(16964): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nanospark.upcdemo/com.nanospark.upcdemo.MainActivity}: java.lang.NullPointerException
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.ActivityThread.access$600(ActivityThread.java:149)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.os.Looper.loop(Looper.java:153)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.ActivityThread.main(ActivityThread.java:4987)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at java.lang.reflect.Method.invokeNative(Native Method)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at java.lang.reflect.Method.invoke(Method.java:511)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at dalvik.system.NativeStart.main(Native Method)
03-24 04:18:49.543: E/AndroidRuntime(16964): Caused by: java.lang.NullPointerException
03-24 04:18:49.543: E/AndroidRuntime(16964):    at com.nanospark.upcdemo.MainActivity.processNewIntent(MainActivity.java:102)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at com.nanospark.upcdemo.MainActivity.onCreate(MainActivity.java:81)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.Activity.performCreate(Activity.java:5020)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-24 04:18:49.543: E/AndroidRuntime(16964):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
03-24 04:18:49.543: E/AndroidRuntime(16964):    ... 11 more

onNewIntent方法:

    @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    processNewIntent(intent);
}

processNewIntent方法:

private void processNewIntent(Intent intent) {
    cyclefragment = new cycleviewfragment();
    Log.d("TEST", "METHOD CALLED TEST");
    if (intent.hasExtra("custom_object")) {
        if (intent.getParcelableExtra("custom_object").equals(null)) {
            Log.d("Testing null", "Object is null");
        } else {
            Log.d("Testing null", "Object is not null");

             cyclefragment.getA1().add((listControlObject)
             intent.getParcelableExtra("custom_object"));
             cyclefragment.adapter.notifyDataSetChanged();

        }
    }

是抛出NullPointerException异常的具体线路:

 cyclefragment.adapter.notifyDataSetChanged(); // - THIS IS LINE 102

ListFragment类:

public class cycleviewfragment extends ListFragment {
    public View cycleviewfragment;
    public ArrayList<listControlObject> a1 = new ArrayList<listControlObject>();
    public ArrayAdapter<listControlObject> adapter;
    public Button addButton;
    public Context context;

    public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
            Bundle SavedInstantState) {

        cycleviewfragment = viewInflation.inflate(
                R.layout.cycleviewfragment_page, container, false);
        context = getActivity().getApplicationContext();
        a1.add(new listControlObject(1, "Name", 1, 1, 1, 1, 1, 1, 1, 1, 1));

        adapter = new ArrayAdapter<listControlObject>(getActivity()
                .getApplicationContext(), android.R.layout.simple_list_item_1,
                a1);

        this.setListAdapter(adapter);

        addButton = (Button) cycleviewfragment.findViewById(R.id.addbutton);

        addButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(getActivity(),
                        listaddactivity.class);
                // myIntent.putExtra("Array", a1); // Optional parameters
                getActivity().startActivity(myIntent);
            }

        });
        return cycleviewfragment;
    }

    public ArrayAdapter<listControlObject> getAdapter() {
        return adapter;
    }

    public void setAdapter(ArrayAdapter<listControlObject> adapter) {
        this.adapter = adapter;
    }

    public ArrayList<listControlObject> getA1() {
        return a1;
    }

    public void setA1(ArrayList<listControlObject> a1) {
        this.a1 = a1;
    }
}

Answer 1:

尝试这个:

if (cyclefragment != null && cyclefragment.adapter != null) {
    cyclefragment.adapter.notifyDataSetChanged();
}


文章来源: Calling notifyDataSetChanged() on my adapter that is within a ListFragment causes a NullPointerException?