2013-08-28 18 views
7

Pracuję z ViewPager z 3 Fragments i chcę zmienić tekst TextView na trzeciej stronie.Pobierz identyfikator TextView w Fragment z FragmentActivity w ViewPager

Na tej stronie mam Button, który po naciśnięciu, przejdź do obrazów SD, aby wybrać jeden. Po zakończeniu powraca do strony i chce zaktualizować TextView ze ścieżką tego obrazu. Problem polega na tym, że gdy próbuję uzyskać dostęp do tego TextView z FragmentActivity, jest on pusty.

Oto mój kod

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> 
+1

gdzie textViewImg zadeklarowaną? –

+0

jeśli masz textview w 'fragment_pager', możesz zainicjować przez' findViewById'. – Raghunandan

+0

Przepraszam, zapomniałem o tym. Jest zadeklarowany w języku xml 'LecturaActivity' (trzecia strona), więc nie ma go w' fragment_pager'. – Lyd

Odpowiedz

12

cant widok tekst dostęp z fragment activity bo jej się na fragment i twój fragment activity layout nie mają żadnego text view z tym id. Musisz uzyskać dostęp do widoku tekstowego ze swojego third fragment, gdzie użyłeś go w swoim layout. Następnie uzyskaj dostęp do object z Twojego fragment activity.

w swoim fragmencie zrobić coś takiego

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

Tworzenie funkcji takich jak ten

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

W wyniku swojej działalności

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

       } 
+0

Podobnie jak kod pytania, mam MyAdapter i inicjuję mój fragment w ten sposób: public Fragment getItem (int position) {Fragment fragmentObject = new firstTab(); ...} ;;;; Jak mogę uzyskać dostęp do tego obiektu fragmentu ? –

+0

Proszę zobaczyć moje powiązane pytanie: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

4

można napompować układ, w którym textView jest zgodność:

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.your_layout, this, false); 

a następnie:

textViewImg = (TextView) view.findViewById(R.id.textViewUrlImgLectura); 
+0

W "Widok widoku = inflater.inflate (R.layout.twoj_layout, to, fałsz);' "this" musi być 'ViewGroup', ale w metodzie' onActivityResult' nie mam żadnych. Jak mogę uzyskać do niego dostęp? – Lyd

+1

spróbuj użyć 'null' zamiast –

+0

OK, nie jest to' null'now, ale nie zmienia tekstu. Mam: 'LayoutInflater inflater = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); \t Widok widoku = inflater.inflate (R.layout.activity_lectura, null, false); \t textViewImg = (TextView) view.findViewById (R.id.textViewUrlImgLectura); \t System.out.println ("widok tekstu:" + tekstViewImg.getText());/* Otrzymuję poprawny tekst TextView */ \t textViewImg.setText (imgName); ' – Lyd

Powiązane problemy