代码之家  ›  专栏  ›  技术社区  ›  Eric Chen

Android空指针异常和片段数据传输[重复]

  •  0
  • Eric Chen  · 技术社区  · 7 年前

    我是android studio的初学者,我的使命是重新设计应用程序。我使用片段。但当我运行我的应用程序时,它已经停止,我的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.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 回复  |  直到 7 年前
        1
  •  0
  •   Mehmed Andrew Lam    7 年前

    你的 init() 函数可能是尝试在视图寻呼机中查找片段内的视图。然而,在那一刻,片段还没有膨胀,因此活动中的视图为空,尝试对其进行操作会产生NPE。你应该使用 onCreateView() 找到这些视图。然后,您可以通过回调机制通知主活动。

    例如,创建 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();
        }
    }
    

    第一个片段 如下所示(上文引用为 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>
    

    假设我们创建了两个更相似的片段类,名为 SecondFragment ThirdFragment

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

        2
  •  0
  •   ken    7 年前

    在片段中,您应该在中调用函数 onCreateView

     @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;
      }