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>
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 .
use getActivity() method. Which will return the enclosing activity for the fragment.
onViewCreated is called immediately after onCreateView (the method you initialize and create all your objects, including your TextView ), so it's not a matter of performance. From the developer site: onViewCreated(View view, Bundle savedInstanceState)
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);
}
You can to inflate a layout in which textView
is declared:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.your_layout, this, false);
and then:
textViewImg = (TextView) view.findViewById(R.id.textViewUrlImgLectura);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With