0

我有一個片段:機器人 - 在片段的方法是不能訪問聲明的變量前面

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

界面代碼是這樣的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; 
     } 
    } 
} 

而且我有一個問題: 爲什麼我無法在我的界面中訪問我的TextView。爲什麼我可以在onCreate方法中設置文本,爲什麼它只能在界面方法中獲得空對象引用?

長時間搜索互聯網後,如果有更高級的開發人員可以獲得解決方案,我會很高興!

+0

請提供您的界面代碼 –

+0

我沒有看到您的界面方法在這裏。我認爲你做了錯誤的事情。 –

+0

嘗試在VertretungsplanTab類中的onRefreshed方法之前添加@Override註釋 –

回答

1

的方法:

public void onRefreshed(Fragment tab,String data); 

包含在MainActivity.java不是在VertretungsplanTab.java實現是相同的。

在VertretungsplanTab您有:

public void onRefreshed(String data) 

它不應該是:

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

對不起,但我只是有點混亂。 在我的實際代碼中,這個錯誤不存在。 – JayJay

+0

在mdataInterface.onRefreshed中放置一個斷點(Vertretungstab,「cool」);並檢查哪個實例爲空 – xRed

+0

你是什麼意思? – JayJay

0

嗯,我解決我的問題...... 我不得不TextView的變量設置爲公共靜態。 ..

public static TextView vertretungsView;