Obtener id de TextView en Fragmento de FragmentActivity en ViewPager
Estoy trabajando con ViewPager
con 3 Fragments
y quiero cambiar el texto de TextView
en tercera página.
En esa página tengo un Button
que cuando está presionado, vaya a imágenes SD para seleccionar una. Cuando haya terminado, regresa a la página y desea actualizar TextView
con la ruta de esa imagen. El problema es que cuando intento acceder a TextView
desde FragmentActivity
es null.
- android append '...' al final textview
- Debe proporcionar un ID de recurso para un error de TextView android
- Añadir opaco "sombra" (esquema) a Android TextView
- ¿Por qué el ajuste de texto de onMeasure no afecta a TextView?
- Cómo hacer un TextView en negrita?
Aquí está mi código
SherlockFragmentActivity:
public class TabsFacturasActivity extends SherlockFragmentActivity { protected MyApplication myApplication; private static final int FILE_SELECT_CODE = 0; private MyAdapter mAdapter; private ViewPager mPager; private PageIndicator mIndicator; private TextView textViewImg; private int lecturas = 0; private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); private boolean adjunto = false; private String filePath; private boolean esLecturaAT = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); // Get the application instance myApplication = (MyApplication)getApplication(); //Need to get that view textViewImg = (TextView) findViewById(R.id.textViewUrlImgLectura); //Creamos la lista LinkedList<String> direcciones = new LinkedList<String>(); ArrayList<TuplaCupsWS> dirs = myApplication.getUsuarioActual().getCups(); for(int dir = 0; dir < myApplication.getUsuarioActual().getCups().size(); dir++) { direcciones.add(new String(dirs.get(dir).getDireccion())); } int tab = getIntent().getIntExtra("tab", 0); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(mAdapter); mPager.setCurrentItem(tab); mIndicator = (TitlePageIndicator)findViewById(R.id.indicator); mIndicator.setViewPager(mPager); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setIcon(R.drawable.logo_factorenergia_peque); /** Create an array adapter to populate dropdownlist */ ArrayAdapter<String> adapter = new ArrayAdapter<String>( getBaseContext(), android.R.layout.simple_spinner_dropdown_item, direcciones); /** Enabling dropdown list navigation for the action bar */ getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); /** Defining Navigation listener */ OnNavigationListener navigationListener = new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { return false; } }; /** Setting dropdown items and item navigation listener for the actionbar */ getSupportActionBar().setListNavigationCallbacks(adapter, (com.actionbarsherlock.app.ActionBar.OnNavigationListener) navigationListener); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case FILE_SELECT_CODE: if (resultCode == RESULT_OK) { adjunto = true; // Get the Uri of the selected file Uri uri = data.getData(); // Get the path String path = ""; try { path = MyUtility.getPath(this, uri); } catch (URISyntaxException e) { myApplication.throwException(this); e.printStackTrace(); } String imgName = path.split("/")[path.split("/").length-1]; textViewImg.setText(imgName); //Here textViewImg is null filePath = path; } break; } super.onActivityResult(requestCode, resultCode, data); } //Method executed when Button is pressed public void examinar(View view) { mostrarFileChooser(); } private void mostrarFileChooser() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); try { startActivityForResult(intent, FILE_SELECT_CODE); } catch (android.content.ActivityNotFoundException ex) { } } private static class MyAdapter extends FragmentPagerAdapter { private String[] titles = { "VER FACTURAS", "VER CONSUMO", "INTRODUCIR LECTURA" }; public MyAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override public CharSequence getPageTitle(int position) { return titles[position]; } @Override public Fragment getItem(int position) { switch (position) { case 0: // Fragment # 0 return new FacturasActivity(); case 1: // Fragment # 1 return new ConsumoActivity(); case 2:// Fragment # 2 return new LecturaActivity(); } //return new MyFragment(); return null; } @Override public int getCount() { return titles.length; } } }
Fragment_pager.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context=".TabsFacturasActivity" > <com.viewpagerindicator.TitlePageIndicator android:id="@+id/indicator" android:padding="10dip" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#1184A4E8" /> </LinearLayout>
- ¿Cuál es la diferencia entre el estilo de TextView y los atributos android: textAppearance?
- El color negro viene en cambio un fondo transparente para textview en android
- Detectar donde el TextView de Android insertaría un salto de línea
- Cómo agregar múltiples textview con imageview en edittext en android
- ¿Diferencia entre addOnGlobalLayoutListener y onWindowFocusChanged?
- ¿Cómo crear sugerencias en el cuadro de edición textview que desaparecen cuando textview tiene foco?
- Animación simple de Android TextView
- La carátula de TextView de Android no funciona
No se puede acceder a la vista de texto desde la fragment activity
ya que su fragment
localizado en el fragment
y el fragment activity layout
no tienen ninguna text view
con este id
. Tienes que acceder a la vista de texto desde tu third fragment
donde lo usaste en su layout
. A continuación, acceda a ese object
desde la fragment activity
de su fragment activity
.
En su fragmento hacer algo como esto
TextView mTextView; mTextView = (TextView)getView().findViewById(R.id.your_text_view);
Crear una función como esta
public void changeText(String mText) { mTextView.setText(mText); }
En el resultado de su actividad
//Do not create new object each time you set text. Use the same fragment object which you use for view pager. Your_Fragment mFragment; protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case FILE_SELECT_CODE: if (resultCode == RESULT_OK) { //Set text from here mFragment.changeText(imgName); }
Puede inflar un diseño en el que se declara textView
:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.your_layout, this, false);
y entonces:
textViewImg = (TextView) view.findViewById(R.id.textViewUrlImgLectura);
- ¿Por qué la altitud es cambio si es de noche o de noche?
- Android Studio: No se pudo completar la ejecución de gradle. La causa está vacía