tablayout studio fragments developers developer and android android-fragments nullpointerexception textview android-tablayout

studio - Android: Actualiza las textualizaciones de diseño de pestañas(fragmentos) de una actividad



tabs android studio 2018 (1)

Hola, no estoy seguro si entiendo tu problema correctamente, pero déjame intentar ayudarte.

Supongo que su adaptador ViewPager se extiende desde FragmentStatePagerAdapter

Primero en su adaptador de SparseArray defina un SparseArray para sus fragmentos como se muestra a continuación:

SparseArray<Fragment> myPagerFragments= new SparseArray<>();

En el método instantiateItem tu adaptador agrega tu fragmento a tu sparsearray.

@Override public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); myPagerFragments.put(position, fragment); return fragment; }

Y en tu método destroyItem elimina tu fragmento de tu sparsearray.

@Override public void destroyItem(ViewGroup container, int position, Object object) { myPagerFragments.remove(position); super.destroyItem(container, position, object); }

Agregue un método a su adaptador que devuelve su fragmento de buscapersonas como se muestra a continuación:

public Fragment getRegisteredFragment(int position) { return myPagerFragments.get(position); }

En sus fragmentos, defina un método público que cambie el texto de su TextView de la siguiente manera:

public void setText(String text){ myTextView.setText(text); }

En su actividad defina su adaptador y agregue un onPageChangeListener a su ViewPager como se muestra a continuación:

MyPagerAdapter mAdapter = new MyPagerAdapter(context,items); myViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Fragment myPagerFragment = mAdapter.getRegisteredFragment(position); if(fragment != null){ ((YourFragment)fragment).setText("Hello World!"); } } @Override public void onPageScrollStateChanged(int state) { } });

Espero que esto te ayude Buena suerte.

Estoy creando una vista de pestaña usando tablayout y viewpager. Yo uso un fragmento para cada pestaña. Y en mi actividad principal, obtengo algunos valores de un dispositivo a través de bluetooth. Los valores se reciben como una sola cadena, y lo divido y lo coloca en las pestañas correspondientes. Pero obtengo una NullPointerException cuando trato de llamar al método setText para la vista de texto en fragmento de mi actividad. ¿Alguien puede mostrarme cómo actualizar las textviews de cada uno de los fragmentos de MainActivity? Por ejemplo, si selecciono la pestaña de temperatura, la vista de texto en el fragmento de temperatura debe actualizarse con el valor de MainActivity. Por favor ayuda

Actividad

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener { Handler bluetoothIn; private static TextView tmpF, humF, CoF; String tempGL, HumGL, coGL, devname; double dblTemp, dblCo; final int handlerState = 0; // used to identify handler message private BluetoothAdapter btAdapter = null; private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_frag_home); tmpF = (TextView)findViewById(R.id.txt_temp_val); humF = (TextView)findViewById(R.id.txt_hum_val); co = (TextView)findViewById(R.id.txt_co_val); //Adding toolbar to the activity Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //Initializing the tablayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); //Initializing viewPager viewPager = (ViewPager) findViewById(R.id.pager); //Adding the tabs using addTab() method tabLayout.addTab(tabLayout.newTab().setText("Temperature")); tabLayout.addTab(tabLayout.newTab().setText("Humidity")); tabLayout.addTab(tabLayout.newTab().setText("CO")); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); //Creating our pager adapter Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount()); //Adding adapter to pager viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); //Adding onTabSelectedListener to swipe views tabLayout.setOnTabSelectedListener(this); bluetoothIn=new Handler() { String readMessage; String[] values = new String[]{""}; public void handleMessage(android.os.Message msg) { if (msg.what == handlerState) { readMessage = (String) msg.obj; values = readMessage.split("#"); for (int j = 0; j < values.length; j++) { int rem = j % 3; if (rem == 0) { tmpF.setText(values[j] + " C"); tempGL = String.valueOf(values[j]); try { dblTemp = Double.parseDouble(tempGL); } catch (NumberFormatException e) { e.printStackTrace(); } } else if (rem == 1) { CoF.setText(values[j] + " ppm"); coGL = values[j]; try { dblCo = Double.parseDouble(coGL); } catch (NumberFormatException e) { e.printStackTrace(); } } else if (rem == 2) { humF.setText(values[j] + " %"); HumGL = values[j]; } } } } }; btAdapter=BluetoothAdapter.getDefaultAdapter(); // get Bluetooth } @Override public void onTabSelected(TabLayout.Tab tab) { // mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }

Tab1

public class OneFragment extends Fragment { View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_one, container, false); return view; } }

fragment_one.xml

<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" tools:context="shinil.tablayout.OneFragment" android:id="@+id/rltnvnv"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Temperature" android:textSize="40dp" android:textStyle="bold" android:id="@+id/txt_temp_val" android:layout_centerInParent="true"/> </RelativeLayout>

Logcat

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)'' on a null object reference at shinil.airopure.MainActivity.onCreate(MainActivity.java:194)

frag_home.xml

<LinearLayout android:id="@+id/main_layout" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="fill_parent"/> </LinearLayout>