0

ich ein Fragment haben:Android - Methode in Fragment ist nicht in der Lage den Zugriff auf Variablen erklärt früher

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"); 
     } 
    } 
} 

Der Interface-Code ist dies in 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; 
     } 
    } 
} 

Und ich habe eine Frage: Warum kann ich nicht auf meine TextView innerhalb meiner Schnittstelle zugreifen. Warum kann ich den Text in der onCreate-Methode setzen und warum erhält er nur einen Null-Objektreferenz in der Interface-Methode ?!

Nach einer langen Suche im Internet würde ich mich freuen, wenn ein fortgeschrittener Entwickler eine Lösung bekommen könnte!

+0

stellen Sie bitte Ihren Schnittstellencode –

+0

Ich sehe nicht Ihre Schnittstelle metho d hier. Ich denke, du hast etwas falsch gemacht. –

+0

versuchen Sie, @Override-Annotation vor der onRefreshed-Methode in Ihrer VertretungsplanTab-Klasse hinzuzufügen –

Antwort

1

Die Methode:

public void onRefreshed(Fragment tab,String data); 

die in MainActivity.java enthalten ist ist nicht dasselbe, das in VertretungsplanTab.java implementiert ist.

In VertretungsplanTab Sie haben:

public void onRefreshed(String data) 

Sollte es nicht sein:

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

Es tut mir leid, aber ich war nur ein bisschen unordentlich. In meinem tatsächlichen Code war dieser Fehler nicht vorhanden. – JayJay

+0

Setzen Sie einen Haltepunkt in mdataInterface.onRefreshed (Vertretungstab, "cool"); und überprüfe, welche Instanz null ist – xRed

+0

was meinst du ?! – JayJay

0

Nun, ich mein Problem gelöst ... ich die Textview Variable public static gesetzt hatte. ..

public static TextView vertretungsView; 
Verwandte Themen