Android NULL指针异常和Fragment数据传输

Android NULL Pointer Exception and Fragment data transmission

我是 android 工作室的初学者,我的任务是重新设计应用程序。我使用片段。但是当我 运行 我的应用程序停止时,我的 Gradle 没有错误。我找了很多网站来解决我的问题,但还是没有头绪。

我有以下问题。

  1. 如何修复 java.lang.RuntimeException(空指针异常)?
09-30 02:59:56.574 17706-17706/? E/memtrack: Couldn't load memtrack module (No such file or directory)
09-30 02:59:56.574 17706-17706/? E/android.os.Debug: failed to load memtrack module: -2
09-30 02:59:56.996 17722-17722/? E/memtrack: Couldn't load memtrack module (No such file or directory)
09-30 02:59:56.996 17722-17722/? E/android.os.Debug: failed to load memtrack module: -2
09-30 02:59:57.090 17734-17734/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: tw.com.flag.parking22, PID: 17734
                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{tw.com.flag.parking22/tw.com.flag.parking22.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                       at android.app.ActivityThread.access0(ActivityThread.java:151)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:135)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                                                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
                                                       at tw.com.flag.parking22.MainActivity.init(MainActivity.java:102)
                                                       at tw.com.flag.parking22.MainActivity.onCreate(MainActivity.java:71)
                                                       at android.app.Activity.performCreate(Activity.java:5990)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                       at android.app.ActivityThread.access0(ActivityThread.java:151) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                       at android.os.Looper.loop(Looper.java:135) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5254) 
                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                       at java.lang.reflect.Method.invoke(Method.java:372) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
09-30 02:59:57.211 1160-1160/? E/EGL_emulation: tid 1160: eglCreateSyncKHR(1865): error 0x3004 (EGL_BAD_ATTRIBUTE)
09-30 03:02:15.409 2159-19872/com.google.android.gms E/Herrevad: [350] RemoteReportsRefreshChimeraService.a: want to send authenticated request, but no Google account on device
09-30 03:02:15.445 1998-2721/com.google.android.gms.persistent E/SQLiteLog: (2067) abort at 31 in [INSERT INTO pending_ops(source,tag,requires_charging,target_package,source_version,required_network_type,flex_time,target_class,runtime,retry_strategy,last_runtime,period,task_type,job_id,user_
09-30 03:02:15.445 1998-2721/com.google.android.gms.persistent E/SQLiteDatabase: Error inserting source=4 tag=NetworkReportService requires_charging=0 target_package=com.google.android.gms source_version=11509000 required_network_type=2 flex_time=3600000 target_class=com.google.android.gms.common.stats.net.NetworkReportService runtime=1506742923454 retry_strategy={"maximum_backoff_seconds":{"3600":0},"initial_backoff_seconds":{"30":0},"retry_policy":{"0":0}} last_runtime=0 period=7200000 task_type=1 job_id=-1 user_id=0
                                                                                 android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (code 2067)
                                                                                     at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                                                                                     at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                                                                                     at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                                                                                     at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                                                                                     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
                                                                                     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                                     at swi.a(:com.google.android.gms@11509280:208)
                                                                                     at sxo.a(:com.google.android.gms@11509280:64)
                                                                                     at sxp.handleMessage(:com.google.android.gms@11509280:29)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                     at android.os.Looper.loop(Looper.java:135)
                                                                                     at android.os.HandlerThread.run(HandlerThread.java:61)
09-30 03:02:15.446 1998-2721/com.google.android.gms.persistent E/NetworkScheduler: Error persisting task: com.google.android.gms/.common.stats.net.NetworkReportService{u=0 tag="NetworkReportService" trigger=window{period=7200s,flex=3600s,earliest=5988s,latest=9588s} requirements=[NET_ANY] attributes=[PERSISTED,RECURRING] scheduled=2388s last_run=N/A jid=N/A status=PENDING retries=0}
09-30 03:02:15.474 1170-1578/? E/Drm: Failed to find drm plugin
09-30 03:02:15.563 2159-2680/com.google.android.gms E/Volley: [129] BasicNetwork.performRequest: Unexpected response code 307 for https://android.googleapis.com/nova/herrevad/network_quality_info
09-30 03:02:15.888 1998-2721/com.google.android.gms.persistent E/SQLiteLog: (2067) abort at 31 in [INSERT INTO pending_ops(source,tag,requires_charging,target_package,source_version,required_network_type,flex_time,target_class,runtime,retry_strategy,last_runtime,period,task_type,job_id,user_
09-30 03:02:15.888 1998-2721/com.google.android.gms.persistent E/SQLiteDatabase: Error inserting source=4 tag=AggregationTaskTag requires_charging=0 target_package=com.google.android.gms source_version=11509000 required_network_type=2 flex_time=600000 target_class=com.google.android.gms.checkin.EventLogService runtime=1506741123628 retry_strategy={"maximum_backoff_seconds":{"3600":0},"initial_backoff_seconds":{"30":0},"retry_policy":{"0":0}} last_runtime=0 period=1800000 task_type=1 job_id=-1 user_id=0
                                                                                 android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (code 2067)
                                                                                     at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                                                                                     at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                                                                                     at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                                                                                     at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                                                                                     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
                                                                                     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                                     at swi.a(:com.google.android.gms@11509280:208)
                                                                                     at sxo.a(:com.google.android.gms@11509280:64)
                                                                                     at sxp.handleMessage(:com.google.android.gms@11509280:29)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                     at android.os.Looper.loop(Looper.java:135)
                                                                                     at android.os.HandlerThread.run(HandlerThread.java:61)
09-30 03:02:15.888 1998-2721/com.google.android.gms.persistent E/NetworkScheduler: Error persisting task: com.google.android.gms/.checkin.EventLogService{u=0 tag="AggregationTaskTag" trigger=window{period=1800s,flex=600s,earliest=1787s,latest=2387s} requirements=[NET_ANY] attributes=[PERSISTED,RECURRING] scheduled=587s last_run=N/A jid=N/A status=PENDING retries=0}
09-30 03:03:37.417 1170-1578/? E/audio_hw_generic: Error opening input stream format 1, channel_mask 0010, sample_rate 16000
09-30 03:30:15.406 2159-21157/com.google.android.gms E/Herrevad: [355] RemoteReportsRefreshChimeraService.a: want to send authenticated request, but no Google account on device
09-30 03:30:15.511 2159-21162/com.google.android.gms E/ZappConnFactory: Unable to bind to PlayStore
09-30 03:30:15.518 2159-21168/com.google.android.gms E/ZappLogOperation: Unable to bind to Phonesky
09-30 03:30:15.526 2159-21162/com.google.android.gms E/ZappConnFactory: Unable to bind to PlayStore
09-30 03:30:15.526 2159-21162/com.google.android.gms E/ZappConnFactory: Unable to bind to PlayStore
09-30 03:30:15.551 2159-2678/com.google.android.gms E/Volley: [127] BasicNetwork.performRequest: Unexpected response code 307 for https://android.googleapis.com/nova/herrevad/network_quality_info
09-30 03:30:15.572 1170-1578/? E/Drm: Failed to find drm plugin
09-30 03:30:22.524 2159-2159/com.google.android.gms E/ActivityThread: Service com.google.android.gms.chimera.GmsIntentOperationService has leaked ServiceConnection ctn@2f714ea6 that was originally bound here
                                                                      android.app.ServiceConnectionLeaked: Service com.google.android.gms.chimera.GmsIntentOperationService has leaked ServiceConnection ctn@2f714ea6 that was originally bound here
                                                                          at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1077)
                                                                          at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:971)
                                                                          at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1774)
                                                                          at android.app.ContextImpl.bindService(ContextImpl.java:1757)
                                                                          at android.content.ContextWrapper.bindService(ContextWrapper.java:539)
                                                                          at android.content.ContextWrapper.bindService(ContextWrapper.java:539)
                                                                          at android.content.ContextWrapper.bindService(ContextWrapper.java:539)
                                                                          at android.content.ContextWrapper.bindService(ContextWrapper.java:539)
                                                                          at com.google.android.gms.chimera.container.zapp.ZappLogOperation.onHandleIntent(:com.google.android.gms@11509280:1)
                                                                          at com.google.android.chimera.IntentOperation.onHandleIntent(:com.google.android.gms@11509280:2)
                                                                          at bwy.run(:com.google.android.gms@11509280:10)
                                                                          at bwv.run(:com.google.android.gms@11509280:14)
                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                                          at java.lang.Thread.run(Thread.java:818)
09-30 03:44:15.607 1998-2721/com.google.android.gms.persistent E/SQLiteLog: (2067) abort at 31 in [INSERT INTO pending_ops(source,tag,requires_charging,target_package,source_version,required_network_type,flex_time,target_class,runtime,retry_strategy,last_runtime,period,task_type,job_id,user_
09-30 03:44:15.607 1998-2721/com.google.android.gms.persistent E/SQLiteDatabase: Error inserting source=4 tag=AggregationTaskTag requires_charging=0 target_package=com.google.android.gms source_version=11509000 required_network_type=2 flex_time=600000 target_class=com.google.android.gms.checkin.EventLogService runtime=1506743055606 retry_strategy={"maximum_backoff_seconds":{"3600":0},"initial_backoff_seconds":{"30":0},"retry_policy":{"0":0}} last_runtime=0 period=1800000 task_type=1 job_id=-1 user_id=0
                                                                                 android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (code 2067)
                                                                                     at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                                                                                     at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                                                                                     at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                                                                                     at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                                                                                     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
                                                                                     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                                     at swi.a(:com.google.android.gms@11509280:208)
                                                                                     at sxo.a(:com.google.android.gms@11509280:64)
                                                                                     at sxp.handleMessage(:com.google.android.gms@11509280:29)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                     at android.os.Looper.loop(Looper.java:135)
                                                                                     at android.os.HandlerThread.run(HandlerThread.java:61)
09-30 03:44:15.607 1998-2721/com.google.android.gms.persistent E/NetworkScheduler: Error persisting task: com.google.android.gms/.checkin.EventLogService{u=0 tag="AggregationTaskTag" trigger=window{period=1800s,flex=600s,earliest=1199s,latest=1799s} requirements=[NET_ANY] attributes=[PERSISTED,RECURRING] scheduled=0s last_run=N/A jid=N/A status=PENDING retries=0}
09-30 03:44:15.637 2159-21184/com.google.android.gms E/Herrevad: [371] RemoteReportsRefreshChimeraService.a: want to send authenticated request, but no Google account on device
09-30 03:44:15.755 2159-2676/com.google.android.gms E/Volley: [126] BasicNetwork.performRequest: Unexpected response code 307 for https://android.googleapis.com/nova/herrevad/network_quality_info
09-30 03:46:13.425 1171-1171/? E/installd: eof
09-30 03:46:13.425 1171-1171/? E/installd: failed to read size

这是主要的activity代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager =(ViewPager) findViewById(R.id.pager);
        PagerAdapter padapter = new PagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(padapter);
        //--------------------------------------------------------------------
        init();
        Action();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

        }
        else {

        }
    }

    private void init(){
        System.out.println("start---------------------");
        textView_userIDVal = (TextView) findViewById(R.id.textView_userIDVal);
        textView_parkingNoVal = (TextView) findViewById(R.id.textView_parkingNoVal);
        textView_pillarNoVal = (TextView) findViewById(R.id.textView_pillarNoVal);
        textView_colorVal = (TextView) findViewById(R.id.textView_colorVal);
        imageView = (ImageView) findViewById(R.id.imageView);
        button_space = (Button) findViewById(R.id.button_space);
        button_scan = (Button) findViewById(R.id.button_scan);
        button_find = (Button) findViewById(R.id.button_find);
        simpleDateFormat = new SimpleDateFormat("MM/dd 'at' HH");


        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            userID = Build.SERIAL;
            //-------------error start  next----------------
            textView_userIDVal.setText("User ID : " + userID);
        }

        if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA}, 200);
        }

        sharedPreferences = getSharedPreferences("Data", 0);
        if(sharedPreferences.contains("parkingNum") && sharedPreferences.contains("time")) {
            parkingNumtmp = sharedPreferences.getString("parkingNum", "");
            textView_parkingNoVal.setText("Parking No. : " + parkingNumtmp + "\t(" + sharedPreferences.getString("time", "") + ")");
        }

        builder = new AlertDialog.Builder(this);
        builder.setCancelable(false);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        builder_timeout = new AlertDialog.Builder(this);
        builder_timeout.setTitle("REMIND");
        builder_timeout.setMessage("Do you find your car ?");
        builder_timeout.setCancelable(false);
        builder_timeout.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                try {
                    json_data = new JSONObject();
                    json_data.put("MT", "timeout");
                    json_data.put("PlaceMac", parkingNumtmp);
                    json_data.put("UserMac", userID);
                    json_write = new JSONObject();
                    json_write.put("Data", json_data);
                    json_write.put("Read", false);
                    isCloseScreen = false;
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                thread = new Thread(TCP);
                thread.start();
                timer_count = 0;
                startFlag = false;
            }
        });
        builder_timeout.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                maxTime = 10;
                maxTime = maxTime / 2;
                timer_count = 0;
                startFlag = true;
            }
        });
    }

    private void Action(){
        button_space.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    json_data = new JSONObject();
                    json_data.put("MT", "count");

                    json_write = new JSONObject();
                    json_write.put("Data", json_data);
                    json_write.put("Read", true);
                    //System.out.println(json_write + "\n");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                thread = new Thread(TCP);
                thread.start();
                /*builder.setTitle("INFORMATION");
                builder.setMessage("All : " + "\nNow : " );
                AlertDialog alertDialog = builder.create();
                alertDialog.show();*/
            }
        });
        button_scan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ScanActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });

        button_find.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(parkingNumtmp != null) {
                    try {
                        maxTime = 10;
                        json_data = new JSONObject();
                        json_data.put("MT", "search");
                        json_data.put("PlaceMac", parkingNumtmp);
                        json_data.put("UserMac", userID);

                        json_write = new JSONObject();
                        json_write.put("Data", json_data);
                        json_write.put("Read", true);
                        //System.out.println(json_write + "\n");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    Toast.makeText(getApplicationContext(), "Don't close the screen before you find your car ! ", Toast.LENGTH_LONG).show();
                    thread = new Thread(TCP);
                    thread.start();
                }
                else {
                    builder.setTitle("WARNING");
                    builder.setMessage("Please scan QRcode first!");
                    AlertDialog alertDialog = builder.create();
                    alertDialog.show();
                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            if(data != null) {
                final Barcode barcode = data.getParcelableExtra("barcode");
                parkingNumtmp = barcode.displayValue;
                Date date = new Date();
                final String time = simpleDateFormat.format(date);
                sharedPreferences.edit().putString("parkingNum", parkingNumtmp).putString("time", time).commit();
                textView_parkingNoVal.post(new Runnable() {
                    @Override
                    public void run() {
                        textView_parkingNoVal.setText("Parking No. : " + parkingNumtmp + "\t(" + time +")");
                    }
                });
            }
        }
    }
  1. 关于片段。当我从服务器接收数据时,是否需要做任何设置?

我想把接收到的数据放到另一个视图的TextView中。

您的 init() 功能可能是尝试在视图寻呼机的片段中查找视图。然而,在那一刻,片段还没有膨胀,所以你在 activity 中的视图是空的,试图对它们进行操作会产生 NPE。您应该使用片段 类 的 onCreateView() 来查找这些视图。然后你可以通过回调机制通知mainactivity

例如,创建FirstFragment如下:

public class FirstFragment extends Fragment {

    private OnFirstFragmentReadyListener callback;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        // This makes sure that the container activity has implemented the callback.
        try {
            callback = (OnFirstFragmentReadyListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement OnFirstFragmentReadyListener");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_first, container, false);
        return rootView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // Notify the parent activity that the fragment is inflated.
        callback.onFirstFragmentReady();
    }

    public interface OnFirstFragmentReadyListener {
        void onFirstFragmentReady();
    }
}

FirstFragment的布局如下(上面引用为fragment_first):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/first_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

假设我们创建了两个更相似的片段 类,分别命名为 SecondFragmentThirdFragment。那么 activity 应该是这样的:

public class MainActivity extends AppCompatActivity implements FirstFragment.OnFirstFragmentReadyListener,
        SecondFragment.OnSecondFragmentReadyListener, ThirdFragment.OnThirdFragmentReadyListener {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager =(ViewPager) findViewById(R.id.pager);
        PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pagerAdapter);

        // Don't call these functions here, spread them into callbacks.
        // init();
        // Action();
    }

    @Override
    public void onFirstFragmentReady() {
        TextView firstTextView = (TextView) findViewById(R.id.first_label);
        ...
        // Now you have the views from FirstFragment instance.
        // You can now call setText() or setOnClickListener() here.
    }

    @Override
    public void onSecondFragmentReady() {
        TextView secondTextView = (TextView) findViewById(R.id.second_label);
        ...
        // Now you have the views from SecondFragment instance.
        // You can now call setText() or setOnClickListener() here.
    }

    @Override
    public void onThirdFragmentReady() {
        TextView thirdTextView = (TextView) findViewById(R.id.third_label);
        ...
        // Now you have the views from ThirdFragment instance.
        // You can now call setText() or setOnClickListener() here.
    }
}

尽管此代码有效,但这可能不是最佳方法。我认为最好对视图进行操作,例如设置文本或在片段本身中分配 OnClickListeners。如果您需要在父 activity 中发生操作后通知片段,您可以在片段中实现 public 方法,并在需要时从父 activity 调用它们。

在片段中,您应该调用 onCreateView 函数中的函数(@Mehmed 提到的原因),如下所示:

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

   // Inflate the layout for this fragment
   View view = inflater.inflate(R.layout.your_fragment, container, false);
   //all findViewById;
   TextView yourTextView = (Text)view.findViewById(R.id.yourTextView);


   //here call for your function 
    init();
   // any other function goes here


  return view;
  }