Obtenir l'id de TextView dans le Fragment de FragmentActivity dans ViewPager
Je travaille avec ViewPager
avec 3 Fragments
et je veux changer le texte de TextView
en troisième page.
Dans cette page, j'ai un Button
, lorsqu'un de ses pressé, allez à la SD des images pour en sélectionner un. Lorsque vous avez terminé, retourne à la page et souhaitez mettre à jour TextView
avec chemin d'accès de l'image. Le problème est que lorsque je tente d'accéder à qui TextView
de FragmentActivity
il est nul.
Voici mon 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>
où est textViewImg déclaré?
si vous avez textview dans
Désolé, j'ai oublié à ce sujet. Il est déclaré dans le xml de
ensuite, vous ne pouvez pas initialiser dans
Comme vous, j'ai MyAdapter, et initialiser mon fragment comme ceci: public Fragment getItem(int position){ Fragment fragmentObject = new firstTab();...} ;;;;Comment puis-je accéder à ce fragment d'objet?
si vous avez textview dans
fragment_pager
ensuite, vous pouvez initialiser par findViewById
.Désolé, j'ai oublié à ce sujet. Il est déclaré dans le xml de
LecturaActivity
(troisième page), il n'est donc pas dans fragment_pager
.ensuite, vous ne pouvez pas initialiser dans
SherlockFragmentActivity
bcoz fragment_pager
n'a pas textviewComme vous, j'ai MyAdapter, et initialiser mon fragment comme ceci: public Fragment getItem(int position){ Fragment fragmentObject = new firstTab();...} ;;;;Comment puis-je accéder à ce fragment d'objet?
OriginalL'auteur Lyd | 2013-08-28
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas accéder à l'affichage du texte à partir de
fragment activity
car il est situé surfragment
et votrefragment activity layout
n'ont pas detext view
avec cetteid
. Vous avez accès à l'affichage du texte à partir de votrethird fragment
où vous l'avez utilisé, dans sonlayout
. Alors que l'accèsobject
de votrefragment activity
.dans votre fragment de faire quelque chose comme ceci
Créer une fonction comme ceci
Dans votre activité résultat
Veuillez voir mes question: stackoverflow.com/questions/24833912/...
OriginalL'auteur Vipul Purohit
Vous pouvez gonfler un modèle dans lequel
textView
est déclarée:et puis:
View view = inflater.inflate(R.layout.your_layout, this, false);
, "ce" doit êtreViewGroup
mais dansonActivityResult
méthode, je n'en ai aucune. Comment puis-je y accéder?essayez d'utiliser
null
au lieuOk, ce n'est pas
null
maintenant, mais elle ne change pas le texte. J'ai:LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.activity_lectura, null, false); textViewImg = (TextView) view.findViewById(R.id.textViewUrlImgLectura); System.out.println("text view: "+textViewImg.getText()); /*I get the correct TextView*/ textViewImg.setText(imgName);
donc, peut-être que cette rubrique va vous aider stackoverflow.com/questions/10533280/...
non, je pense que le problème est vue n'est pas mise à jour. J'ai essayé
invalidate
mais ça ne fonctionne pas. Je vais ouvrir d'autres question.OriginalL'auteur Lia Pronina