Android NULL指针异常和片段数据传输

时间:2017-09-30 04:22:50

标签: java android nullpointerexception fragment runtimeexception

我是android studio的初学者,我有一个重新设计应用程序的任务。我使用片段。但是当我运行我的应用程序时,它已经停止并且我的Gradle中没有错误。我找了很多网站来解决我的问题,但仍然不知道。

我在下面有一些问题。

  1. 如何修复java.lang.RuntimeException(NULL指针异常)?
  2. 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.access$800(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.access$800(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
    

    以下是主要活动代码

    @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. 关于片段。当我从服务器接收数据时,是否需要进行任何设置?
    2. 我想在另一个视图中将收到的数据放到TextView中。

2 个答案:

答案 0 :(得分:0)

您的init()函数可能会尝试在视图寻呼机中查找片段内的视图。但是,在那一刻,片段还没有膨胀,所以你在活动中的视图为空,并试图对它们进行操作给NPE。您应该使用onCreateView() Fragment类来查找这些视图。然后你可以通过回调机制通知主要活动。

例如,按如下方式创建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的类似片段类。然后活动应该是这样的:

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。如果您需要在父活动中发生操作后通知片段,则可以在片段内实现公共方法,并且可以在需要时从父活动中调用它们。

答案 1 :(得分:0)

在片段中你应该调用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;
  }