0

J'ai un fragment:android - méthode fragment ne peut pas accéder à des variables déclarées plus tôt

public class VertretungsplanTab extends Fragment implements MainActivity.VertDataInterface{ 

    TextView vertretungsView; 
    String LOG_TAG = VertretungsplanTab.class.getSimpleName(); 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.vertretungsplan_fragment, container,false); 
     vertretungsView = (TextView) rootView.findViewById(R.id.textView2); 
     vertretungsView.setText("initialised"); 
     return rootView; 
    } 

    @Override 
    public void onRefreshed(Fragment tab,String data){ 
     Log.v(LOG_TAG, "interface is working"); 
     if(vertretungsView!=null) { 
      vertretungsView.setText(data); 
     } 
     else{ 
      Log.e(LOG_TAG, "TextView is null object"); 
     } 
    } 
} 

Le code d'interface est-ce dans MainActivity:

public class MainActivity extends AppCompatActivity { 

      VertDataInterface mdataInterface; 
      private Fragment Vertretungstab; 

      public interface VertDataInterface { 
       public void onRefreshed(Fragment tab,String data); 
      } 
      private SectionsPagerAdapter mSectionsPagerAdapter; 
      private ViewPager mViewPager; 


      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
       setSupportActionBar(toolbar); 
       // Create the adapter that will return a fragment for each of the three 
       // primary sections of the activity. 
       mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

       // Set up the ViewPager with the sections adapter. 
       mViewPager = (ViewPager) findViewById(R.id.container); 
       mViewPager.setAdapter(mSectionsPagerAdapter); 

       TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
       tabLayout.setupWithViewPager(mViewPager); 

       Vertretungstab = mSectionsPagerAdapter.getItem(1); 
       try { 
        mdataInterface = (VertDataInterface) Vertretungstab; 
       } catch (ClassCastException e) { 
        Log.e(LOG_TAG, e + " fragment must implement VertDataInterface"); 
       } 
      } 

    @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      int id = item.getItemId(); 
      if (id == R.id.action_refresh) { 
       mdataInterface.onRefreshed(Vertretungstab,"cool"); 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 

     public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        DashboardTab tabDashboard = new DashboardTab(); 
        return tabDashboard; 
       case 1: 
        VertretungsplanTab tabVertretungsplan = new VertretungsplanTab(); 
        return tabVertretungsplan; 
       default: 
        return null; 
      } 
     } 

     @Override 
     public int getCount() { 
      // Show 2 total pages. 
      return 2; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "Dashboard"; 
       case 1: 
        return "Vertretungsplan"; 
      } 
      return null; 
     } 
    } 
} 

Et j'ai une question: Pourquoi suis-je incapable d'accéder à mon TextView dans mon interface? pourquoi puis-je définir le texte dans la méthode onCreate et pourquoi obtient-il seulement une référence d'objet nul dans la méthode d'interface ?! Après une longue recherche sur Internet, je serais heureux si un développeur plus avancé pouvait obtenir une solution!

+0

fournir votre code d'interface s'il vous plaît –

+0

Je ne vois pas votre interface metho d ici. Je pense que vous avez fait quelque chose de mal à cela. –

+0

essayez d'ajouter l'annotation @Override avant la méthode onRefreshed dans votre classe VertretungsplanTab –

Répondre

1

La méthode:

public void onRefreshed(Fragment tab,String data); 

contenu dans MainActivity.java est pas le même qui est mis en œuvre dans VertretungsplanTab.java.

En VertretungsplanTab vous avez:

public void onRefreshed(String data) 

Ne devrait-il:

public void onRefreshed(Fragment tab, String data) 
+0

Je suis désolé mais j'étais juste un peu brouillon. Dans mon code actuel, cette erreur n'était pas présente. – JayJay

+0

Mettez un point d'arrêt dans mdataInterface.onRefreshed (Vertretungstab, "cool"); et vérifiez quelle instance est nulle – xRed

+0

que voulez-vous dire ?! – JayJay

0

Eh bien, je résolu mon problème ... je devais définir la variable TextView statique public. ..

public static TextView vertretungsView;