Get id of TextView in Fragment from FragmentActivity in ViewPager

android, android-fragments, android-viewpager, textview

Solution

You cant access text view from `fragment activity` because its located on `fragment` and your `fragment activity layout` don't have any `text view` with this `id`. You have to access text view from your `third fragment` where you used it in its `layout`. Then access that `object` from your `fragment activity`.

in your fragment do something like this

TextView mTextView;
mTextView = (TextView)getView().findViewById(R.id.your_text_view);

Create a function like this

public void changeText(String mText)
{
mTextView.setText(mText);
}

In your activity result

//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);

               }

Problem

I'm working with `ViewPager` with 3 `Fragments` and I want to change text of `TextView` in third page. In that page I have a `Button`that when its pressed, go to SD images to select one. When done, returns to page and want to update `TextView` with path of that image. The problem is that when I try to access that `TextView`from `FragmentActivity`it is null. Here is my code 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> ```

Original source

Related problems